2016-10-12 12 views
1

Я обертываю библиотеку в свой класс. Я хотел бы вызвать метод шаблона с unsigned int non-type, предоставленным в библиотеке в моем конструкторе класса.Нестандартные аргументы шаблона Явное создание экземпляра в исходном файле

#include <iostream> 
#include <bar.h> // template header in here 
class foo { 
    foo(unsigned num) { 
     BAR<num>(); // a template method BAR inside "bar.h" 
    } 
}; 

Когда я пытаюсь поиграть с этим, кажется, что параметр non-type является constexpr. Таким образом, приведенный выше код генерирует ошибку, указывающую на наличие ошибки const внутри вызова функции.

Поэтому я решил сделать класс foo шаблоном класса и передать этот беззнаковый параметр unsigned в параметре аргумента шаблона foo.

#include <iostream> 
#include <bar.h> // template header in here 
template <unsigned num> 
class foo { 
    foo() { 
     BAR<num>(); // a template method BAR inside "bar.h" 
    } 
}; 

Это, кажется, хорошо работает. Однако я хотел бы разделить заголовок и исходный файл на отдельные файлы .hpp/.cpp. Согласно this thread, если я хочу разместить реализацию шаблона в исходном файле .cpp, я должен явно указать все возможные аргументы шаблона в конце .cpp-файла. Для параметра non-type, такого как unsigned integer, означает ли это, что я должен создать тысячи возможных чисел без знака, чтобы сделать шаблон доступным для всего объекта без знакового числа? Спасибо за помощь.

ответ

0

Я бы не рекомендовал разделять реализацию класса шаблона в исходном файле. Если я правильно понимаю вашу ситуацию, я не думаю, что это возможно, если вы не создадите все возможные значения параметра шаблона, что невозможно для unsigned.

+0

Означает ли это, что я должен подвергать реализацию шаблона в любом случае, если я хотел бы использовать аргумент non-type в качестве шаблона? – yc2986

+0

Да, я так считаю – grigor

+0

Я все еще хочу отделить реализацию. Есть ли другой способ передать constexpr в качестве параметра для конструктора в этом случае? – yc2986

 Смежные вопросы

  • Нет связанных вопросов^_^