假设我有我的自定义字符串类:
class my_string : public std::string
{
// ...
}
而且我想创建一个模板化的函数,默认情况下它都接受
my_string
两者:template <typename TString = my_string>
TString do_something(const TString& input)
{
// ...
}
但是当我用以下方式调用它时:
auto result = do_something("abcdef");
(当然)它调用
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});
}