通过传递const char*隐式选择字符串模板

vla*_*don 6 c++ templates

假设我有自定义字符串类:

class my_string : public std::string
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个模板化函数,my_string默认情况下接受这两个函数:

template <typename TString = my_string>
TString do_something(const TString& input)
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但当我打电话给:

auto result = do_something("abcdef");
Run Code Online (Sandbox Code Playgroud)

它(当然)打电话do_something<char[7]>().如何在do_something<my_string> 没有明确指定类型的情况下强制它调用(即写入do_something("abcdef"),不是do_something<my_string>("abcdef"))?

utn*_*tim 3

详细说明“从字符串参数构造”。

template <typename TString = my_string,
typename std::enable_if<std::is_base_of<std::string, TString>::value>::type = nullptr>
TString do_something(const TString& input)
{
    // ...
}

template <typename ...Args,
typename std::enable_if<std::is_constructible<my_string, Args....>::value>::type = nullptr>
my_string do_something(Args&&... args)
{
    return do_something<my_string>({args});
}
Run Code Online (Sandbox Code Playgroud)