用户定义文字的模板替代方案

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)

由于我的搜索,我知道用户用户定义的文字是有限的,不能用于上面的大多数模板.

是否存在替代解决方案,或者在这种情况下用户定义的文字是不可能的?

注:base230.

Sto*_*ica 9

它实际上可能有一点间接性.我们的想法是将模板推断延迟到您拥有类型信息的程度.

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<>类型的变量,尽管它可以传递给任何期望的函数.这可能是一个错误或一个功能,取决于你如何看待它.