【发布时间】:2011-11-14 04:03:55
【问题描述】:
在 C++ 中是否可以根据模板参数包含/排除成员变量?
这是一个例子:
template< class T >
class RealNumber
{
T real;
};
template< class T >
class ComplexNumber
{
T real;
T imag;
};
由于它们有许多共同的属性,只有一个类来表示一个数字(带有额外的模板参数)可以防止一些代码重复。
我想做的事情是这样的
template< class T , class U >
Number
{
T real;
// If U is not void
U imag;
}
所以如果第二个参数为 void,就不会有名为 imag 的成员,产生:
sizeof( Number< T , void > ) == sizeof( T )
我尝试了 enable_if 但没有得到任何结果。
如果这不可能,是否有任何黑客可以使这成为可能?
【问题讨论】:
-
你可以把它设为
Number<T>并根据T是基本的还是std::pair<U,W>进行分支。 -
Boost 有一个您可能感兴趣的压缩对类型。我相信它被称为
compressed_pair。 -
@DennisZickefoose 我试过compressed_pair,效果很好。虽然它只能使一个变量包含/排除,但它可以被黑客攻击以使其包含多个变量。我会调查的。谢谢你的回答。
标签: c++ templates compile-time enable-if