Sha*_*adi 4 c++ templates user-defined-literals c++11
我创建了一个模板类,我想使用用户定义的文字.
我的代码:
template<int base = 10>
class MyClass
{
// class code
};
// template<int base> /* Not allowed */
MyClass<17> operator "" _G(const char* param, size_t length)
{
string temp(param, length);
return MyClass<17> (temp);
}
int main()
{
MyClass<17> A = "75AD"_G;
A.print();
}
Run Code Online (Sandbox Code Playgroud)
由于我的搜索,我知道用户用户定义的文字是有限的,不能用于上面的大多数模板.
是否存在替代解决方案,或者在这种情况下用户定义的文字是不可能的?
注:base
可2
到30
.
它实际上可能有一点间接性.我们的想法是将模板推断延迟到您拥有类型信息的程度.
struct MyClassCtor {
std::string param;
template<int base>
operator MyClass<base>() {
return param;
}
};
MyClassCtor operator "" _G(const char* param, size_t length)
{
return {std::string(param, length)};
}
Run Code Online (Sandbox Code Playgroud)
这是"返回类型解析器"成语的一个例子.
当然,请记住,这意味着auto a = 345_G
不会创建MyClass<>
类型的变量,尽管它可以传递给任何期望的函数.这可能是一个错误或一个功能,取决于你如何看待它.