c++ - 模板化类中模板化成员函数的特化

标签 c++ template-specialization

我有一个带有模板化成员函数的模板化类

template<class T>
class A {
public:
    template<class CT>
    CT function();
};

现在我想以两种方式专门化模板化成员函数。首先是与类具有相同的类型:

template<class T>
template<>  // Line gcc gives an error for, see below
T A<T>::function<T>() {
    return (T)0.0;
}

bool 类型的第二个:

template<class T>
template<>
bool A<T>::function<bool>() {
    return false;
}

下面是我尝试测试它的方式:

int main() {
    A<double> a;
    bool b = a.function<bool>();
    double d = a.function<double>();
}

现在 gcc 给我上面标记的行:

error: invalid explicit specialization before ‘>’ token
error: enclosing class templates are not explicitly specialize

所以 gcc 告诉我,如果我想专门化函数,我必须专门化 A,对吗? 我不想那样做,我希望外部类的类型是开放的...

最后的答案是:不可能?或者有什么办法吗?

最佳答案

是的,这就是问题所在:

error: enclosing class templates are not explicitly specialized 

如果不对类进行特化,则无法对成员进行特化。

可以做的是将来自function 的代码放在一个单独的类中并专门化它,就像 basic_string 依赖于一个单独的 char_traits 类一样。然后非专门的函数可以调用特征类中的助手。

关于c++ - 模板化类中模板化成员函数的特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143555/

相关文章:

c++ - 如何反转 PNG 以进行绘图

C++ 模板参数推导不起作用

C++ 模板特化 - 避免重新定义

c++ - std::vector<T> 是 `user-defined type` 吗?

c++ 模板特化与 std::enable_if 不工作

c++ - 如何专门化 std::begin?

c++ - BOOST_FOREACH 迭代右值容器有非 const ref 值错误

c++ - 未实例化的模板的C++标准要求

c++ - 在 OpenSSL 上使用 Crypto++ 生成的 RSA key

c++ - 具有非专用模板参数的虚拟方法