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

kir*_*gum 2 c++ policy templates crtp

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

InputA a;
InputA a2;
InputB b;
Run Code Online (Sandbox Code Playgroud)

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

out<>(a) out; 
Run Code Online (Sandbox Code Playgroud)

out<InputA>(a) out;
Run Code Online (Sandbox Code Playgroud)

.

out<>(a2) out;
Run Code Online (Sandbox Code Playgroud)

out<InputA>(a2) out; 
Run Code Online (Sandbox Code Playgroud)

.

out<>(b) out;
Run Code Online (Sandbox Code Playgroud)

out<InputB>(b) out;
Run Code Online (Sandbox Code Playgroud)

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

aut*_*hir 7

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

例如

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

auto o = make_out(a);
Run Code Online (Sandbox Code Playgroud)