用户定义文字的模板替代

template alternative for user defined literals

我创建了一个模板 class,我想使用用户定义的文字。

我的代码:

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();
}

作为我的搜索结果,我知道用户用户定义的文字是有限的,不能用于大多数模板,例如上面的模板。

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

注:base可以是230

实际上可以通过一些间接的方式实现。这个想法是将模板推导延迟到您拥有类型信息的位置。

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)};
}

这是 "Return Type Resolver" 成语的一个例子。

当然,请记住这意味着 auto a = 345_G 不会创建 MyClass<> 类型的变量,尽管它可以传递给任何需要一个的函数。这可能是错误或功能,具体取决于您如何看待它。