是否可以防止在没有专门化的情况下使用 C++ 模板?
例如,我有
template<class T>
void foo() {}
而且我不希望在没有专门用于foo<int>
or的情况下使用它foo<char>
。
是否可以防止在没有专门化的情况下使用 C++ 模板?
例如,我有
template<class T>
void foo() {}
而且我不希望在没有专门用于foo<int>
or的情况下使用它foo<char>
。
您应该能够声明该函数,而无需在通用情况下实际定义它。这将导致对非专业模板的引用发出未定义符号链接器错误。
template<class T>
void foo();
template<>
void foo<int>() {
// do something here
}
这对我来说很好用clang++
。
您可以在函数体中使用未定义的类型。您将收到编译时错误消息:
template<class T> struct A;
template<class T>
void foo()
{
typename A<T>::type a; // template being used without specialization!!!
cout << "foo()\n";
}
template<>
void foo<int>()
{
cout << "foo<int>\n";
}
template<>
void foo<char>()
{
cout << "foo<char>\n";
}
int main()
{
foo<int>();
foo<char>();
// foo<double>(); //uncomment and see compilation error!!!
}
当 foo 函数有参数时,这是可能的。例如:template void foo(T param){} 现在,你可以调用 foo(1), foo('c') 而无需专门化。