强制字符串文字参数导致 std::string 类模板推导

Fel*_*ara 1 c++ templates

我想编写一个类模板,它能够容纳不同的类型。但是,我想避免类型char*或的专业化char[]。字符串应始终为std::string. 下面的代码是我到目前为止所拥有的。然而,写作Scalar("hello")产生T = char[6]而不是产生T = std::string。我可以写Scalar<std::string>("hello")Scalar(std::string("hello"))解决这个问题。我的问题是,有没有一种方法可以修改下面的代码,使编写Scalar("hello")工作按预期进行,并且该类仍然只有一个模板参数?

template <typename T>
class Scalar {
public:

explicit Scalar(const T& val);

};
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 7

演绎指南(c++17) 可能有帮助:

template <std::size_t N>
Scalar(const char(&)[N]) -> Scalar<std::string>;
Run Code Online (Sandbox Code Playgroud)

演示