Я обертываю библиотеку в свой класс. Я хотел бы вызвать метод шаблона с 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, означает ли это, что я должен создать тысячи возможных чисел без знака, чтобы сделать шаблон доступным для всего объекта без знакового числа? Спасибо за помощь.
Означает ли это, что я должен подвергать реализацию шаблона в любом случае, если я хотел бы использовать аргумент non-type в качестве шаблона? – yc2986
Да, я так считаю – grigor
Я все еще хочу отделить реализацию. Есть ли другой способ передать constexpr в качестве параметра для конструктора в этом случае? – yc2986