gpt4 book ai didi

c++ - 当 Type = bool 时,运算符 bool() 与模板 Type() 运算符冲突

转载 作者:行者123 更新时间:2023-12-01 14:03:04 24 4
gpt4 key购买 nike

当模板类型为 bool 时,我的模板运算符与 bool 运算符冲突(重载)。有什么办法解决这个问题吗?例如,当 T 分配给 bool 时,我可以以某种方式“关闭”operator T() 吗?

template <typename T = bool>
class MyClass {
public:
operator bool() const { return false; }
operator T() const { return t; }
private:
T t;
};

最佳答案

operator boolT 时,您可以使用 SFINAE 禁用 bool

template <typename T = bool>
class MyClass {
public:
template <typename U = T, typename std::enable_if<!std::is_same<U, bool>::value, bool>::type = true>
operator bool() const { return false; }
operator T() const { return t; }
private:
T t;
};

另一种选择是专门针对 bool 之类的
template <typename T = bool>
class MyClass {
public:
operator bool() const { return false; }
operator T() const { return t; }
private:
T t;
};

template <>
class MyClass<bool> {
public:
operator bool() const { return false; }
private:
bool t;
};

关于c++ - 当 Type = bool 时,运算符 bool() 与模板 Type() 运算符冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61805811/

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