我想编写一个类模板,它能够容纳不同的类型。但是,我想避免类型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)
演绎指南(c++17) 可能有帮助:
template <std::size_t N>
Scalar(const char(&)[N]) -> Scalar<std::string>;
Run Code Online (Sandbox Code Playgroud)
演示。
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |