gpt4 book ai didi

c++ - 模板化类型转换运算符和偏特化

转载 作者:行者123 更新时间:2023-11-28 01:01:50 25 4
gpt4 key购买 nike

我想使用 bool 的特化来模板化转换运算符,但它不起作用。

template<typename T> //Don't know if the fact that C is templated itself is relevant here
class C
{
...
template<typename U> operator U() const { return another_namespace::MyCast<U>(*this); }
template<> operator bool() const { return IsValid(); }
};

这给了我 (g++ 4.6)

explicit specialization in non-namespace scope ‘class C< T>’

现在就

operator bool() const { return IsValid(); }

本身有效,MyCast 也是如此(它是在外部命名空间中声明的友元函数)。有什么办法可以在这里获得预期的 behHoavior?

编辑:我随后找到了this ,看起来像是同一个基本问题,但是答案(给出了一个非常复杂的解决方案)看起来是专门为字符串设计的。此外,那里的问题原来是歧义,我认为这不是这里的问题——我得到了一个非常不同的编译器错误消息。

最佳答案

您可以重载转换运算符,因此只需使用 operator bool() 的非模板版本就可以了:

template<typename T>
class C
{
...
template<typename U> operator U() const { ... }
operator bool() const { ... }
};

关于c++ - 模板化类型转换运算符和偏特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8347315/

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