【发布时间】:2020-11-24 13:42:09
【问题描述】:
有没有办法拥有这样的模板类
template<bool state = true>
class A
{
};
并且有另一个类可以接受A<true> 和A<false> 作为参数或字段,而不是模板类本身。像这样:
class B
{
public:
B(A& arg_a)
: a(arg_a)
{}
private:
A& a;
};
int main()
{
A<true> aTrue;
A<false> aFalse;
B bTrue(aTrue);
B bFalse(aFalse);
};
或者这是否根本不可能,因为具有不同模板参数的同一类的两个对象被编译器视为不同的类型?关于如何设计它的其他建议也将不胜感激。我知道如果我只是将模板参数设为类字段,这种设计是可能的,但我想知道这是否可以使用模板参数来完成。
【问题讨论】:
-
或者这根本不可能,因为具有不同模板参数的同一类的两个对象被编译器视为不同的类型?正确。
-
拥有
using typeA = A<true>;和using typeB = A<false>;可能会有所帮助,现在您可以考虑如何将typeA和typeB传递给相同的方法。
标签: c++ templates member default-template-argument