我有以下模板类:
template <typename T>
class myClass
{
public:
// Many methods...
protected:
private:
T attribute
// Other attributes.
};
实例化 myClass<void>
类型的对象不工作,因为 void attribute
.
你能给我一些提示,让我能够使用 myClass<void>
类型的对象吗?没有专门化整个类(class)。由于它有许多依赖于类型 T 的成员函数,因此对其进行特殊化会导致代码重复。
最佳答案
创建一个包含属性的模板化基类,将其专门化为 void
并从中继承:
namespace detail //Warn end user that he should not use stuff from here
{
template <typename T>
struct myClass_base
{
T attribute;
};
template <>
struct myClass_base<void>
{}; //No attribute at all
}
template <typename T>
class myClass: private detail::myClass_base<T>
{
//rest of definition
};
这会使 myClass
在实例化类型为 void
时缺少 attribute
字段
关于c++ - 使用不完整类型 void 的模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37734490/