基于重载构造函数的策略类模板参数选择

时间:2012-03-08 18:37:20

标签: c++ templates policy crtp

我想要一个模板类,根据传递给构造函数的类的类型自动选择它的参数。 对象已经有类型。

InputA a;
InputA a2;
InputB b;

构造函数应该理解这些类型

out<>(a) out; 

out<InputA>(a) out;

out<>(a2) out;

out<InputA>(a2) out; 

out<>(b) out;

out<InputB>(b) out;

在可以从输入参数的类型中提取模板参数(策略)时,似乎是多余的。

1 个答案:

答案 0 :(得分:7)

这与std::pair发生的问题相同。 此问题的标准解决方法是定义模板工厂(如std::make_pair())。

e.g。

template<class policy>
out<policy> make_out(policy p)
{
    return out<policy>(p);
}

auto o = make_out(a);