根据模板参数在编译时安排类结构
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;
}
所以如果第二个参数为空,则不会有名为 imag 的成员,产生:
sizeof( Number< T , void > ) == sizeof( T )
我尝试了enable_if但无法得到任何结果。
如果这是不可能的,是否有任何技巧可以使其成为可能?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
检查继承技巧是否适合您:
Check if the inheritance trick is viable for you:
这个答案不完整,仅显示如何使用
enable_if
来专门化类模板。详细实施取决于问题的具体性质。
例如,
is_a
关系),您可能会考虑从一种实现继承到另一种实现。U
是否确实需要。另外,实数Number
或只是Number
的首选语法应该是什么。 ETC。This answer is incomplete and only shows how to use
enable_if
for specialization of class template.The detail implementation depends on the exact nature of the problem.
Such as,
is_a
relationship) , you might consider inheriting from one implementation to another.U
is really needed. Also what should be the preferred syntax for real numberNumber<int,void>
or justNumber<int>
. etc.很难说你在哪里,但这里有一个粗略的框架:
请注意,大多数标准库数值函数已经为
std::complex
类型重载,因此你可能需要考虑一个关于您是否真的需要自己写这个。用法:
Number
、Number
、Number>
。It's very hard to say where you're driving at, but here's a rough skeleton:
Note that most standard library numerical functions are already overloaded for the
std::complex
types, so you may want to think a bit about whether you really need to write this yourself.Usage:
Number<int>
,Number<double>
,Number<std::pair<double, double>>
.