假设我有自定义字符串类:
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"))?
详细说明“从字符串参数构造”。
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)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |