namespace aha{class Foo{public: template < typename T > T To() const { // some code here }};template <>bool Foo::To < bool > () const{ // some other code here}}
gcc给出错误:
Explicit instantiation of ‘To < bool >’ after instantiation
我想只使用成员函数的模板特化来实现它,以便我的库的用户在将Foo转换为不同的数据类型时获得相同的功能
Foo obj;bool b( obj.To < std::string > () );int i( obj.To < int > () );float f( obj.To < float > () );
等等.
请让我知道我在代码中做错了什么.
解决方法Explicit instantiation of ‘To < bool >’ after instantiation
以上说明了一切:它在使用它的通用版本后变得专业化.
函数模板特化可以通过重载来模拟,这是一种更灵活的机制(例如,没有对函数模板进行部分特化,但是可以通过重载实现所需的效果):
template<class T> struct Type {}; // similar to boost::type<>class Foo{ template<class T> T doTo(Type<T>) const; // the generic version bool doTo(Type<bool>) const; // an overload for bool only // add more overloads as you pleasepublic: template < typename T > T To() const { return this->doTo(Type<T>()); }};总结
以上是内存溢出为你收集整理的在C中创建成员函数模板专业化全部内容,希望文章能够帮你解决在C中创建成员函数模板专业化所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)