Dir*_*irk 6 c++ constructor overloading type-conversion
我写了一个简单的类模板:
template <class T>
class my_class
{
public:
my_class(T value)
: my_Value(value)
{
}
private:
T my_Value;
};
Run Code Online (Sandbox Code Playgroud)
现在我可以在一个简单的函数签名中使用这个模板,比如: my_function(my_class<std::string> my_string)
当我想调用该函数时,我可以轻松使用它:
auto my_instance = my_class<std::string>("my value");
my_function(my_instance);
Run Code Online (Sandbox Code Playgroud)
但我想实现的是这样的函数调用:
my_function("my value")
Run Code Online (Sandbox Code Playgroud)
我的类模板应该为我隐式地转换为模板的类型。我想我需要某种运算符重载。
std:optional 例如可以这样做。
您只能进行一次隐式用户转换,因此您的调用const char*无效。
有几种选择,
为 my_class 添加另一个构造函数
my_class(T value) : my_Value(value) {}
template <typename U, std::enable_if_t<std::is_convertible<U, T>, int> = 0>
my_class(U value) : my_Value(value) {}
Run Code Online (Sandbox Code Playgroud)
为 my_function 添加重载,
void my_function(my_class<std::string> my_string)
void my_function(const char* s) { return my_function(my_class<std::string>{s}); }
Run Code Online (Sandbox Code Playgroud)
更改调用站点以使用以下方式调用它std::string:
my_function(std::string("my value"))
using namespace std::string_literals;
my_function("my value"s)
Run Code Online (Sandbox Code Playgroud)