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

时间:2017-05-23 05:21:20

标签: c++ c++11 templates user-defined-literals

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

我的代码:

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

1 个答案:

答案 0 :(得分:9)

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

auto a = 345_G

这是here成语的一个例子。

当然,请记住,这意味着MyClass<>不会创建Popen(["t2x",cfile],env=denv,stdout=h) 类型的变量,尽管它可以传递给任何期望的函数。这可能是一个错误或一个功能,取决于你如何看待它。