gpt4 book ai didi

c++ - 在 C++ 中创建成员函数模板特化

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:49:02 24 4
gpt4 key购买 nike

我正在编写一个类,我想在其中创建这样的成员函数模板特化

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 please

public:
template < typename T >
T To() const {
return this->doTo(Type<T>());
}
};

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com