【发布时间】:2019-04-12 08:45:22
【问题描述】:
我正在尝试创建一个采用类型名的模板函数。我想将这个模板专门用于一些基本类型,如int、long、string 和double。对于所有其他类型,我需要有一个专门的类/结构代码,以及其他类型的默认代码。
我当前的代码是这个:
// Declaration
template <typename T, typename enable_if<is_class<T>::value>::type = 0>
void test(T& value);
template <typename T, typename enable_if<!is_class<T>::value>::type = 0>
void test(T& value);
template <> // What am i supposed to write here ?
void test<int>(int& value);
// Definition
template <typename T, typename enable_if<is_class<T>::value>::type = 0>
void test(T& value) {
cout << "Class/struct test" << endl;
}
template <typename T, typename enable_if<!is_class<T>::value>::type = 0>
void test(T& value) {
cout << "Other types test" << endl;
}
template <>
void test<int>(int& value) {
cout << "int test" << endl;
}
此代码无法编译。我不知道我应该在int 专用模板中写什么。
我正在尝试使用the examples from this documentation,但无法使用。
【问题讨论】:
-
当
is_class<T>::value为真时,enable_if<is_class<T>::value>::type为void。您尝试将0分配给void。 -
您是否阅读了您发布的链接中的注释?它几乎从字面上描述了你的错误。
-
最好使用重载函数来实现此目的,因为您不能部分特化函数模板。
标签: c++ c++11 templates template-specialization enable-if