gpt4 book ai didi

成员运算符的 C++ enable_if(或解决方法)

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:01:17 27 4
gpt4 key购买 nike

template<typename T>
struct foo
{
T* p;
foo(T* x) : p(x) {}
~foo() { if(p) delete p; }
T& operator*() const { return *p; }
};

int main()
{
foo<int> i(new int);
foo<void> v(new int); // <= illegal use of type 'void'
}

如果 T = void,那么我不想实现 operator*()。我怎样才能做到这一点?我不想特化该类,因为我的类中还有许多其他方法。

PS:请注意,这只是解释我的问题的示例。

最佳答案

您可以将所有其他方法(它们与 T==void 配合得很好)移动到一个基类中,并使 foo 从它派生。然后 foo 可以特化为不为 T==void

声明 operator*
template <typename T>
struct foobase {

T* p;
foobase(T* x) : p(x) {}
~foobase() { if(p) delete p; }

};

template <typename T>
struct foo : foobase<T> {
T& operator*() const { return *p; }
};

template<>
struct foo<void> : foobase<void> {

};

关于成员运算符的 C++ enable_if(或解决方法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5650393/

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