首页 > 解决方案 > 在 C++ 中可以使用模板文字吗?

问题描述

我想为模板类创建一个文字,这在 C++ 中可能吗?

我想做这样的事情:

template<typename T> class A
{
    A(T x);
};

template<typename T>
A<T> operator"" _d(unsigned long long int x_double)
{
    return A<T>(2 * x_double);
}

A<int> a = 4_d;

例如,如果我选择它应该始终返回,我可以获得一个要编译的文字A<short>,但是是否有可能让编译器将类型推迟到T受让人类型?

标签: c++templatesliterals

解决方案


不,没有这样的事情;唯一的模板文字用于字符串。但是您想要的可以通过包装器类型实现:

struct ConvertToA {
    unsigned long long int init;
    template <typename T>
    operator A<T>() { return {init}; }
};

ConvertToA operator"" _d(unsigned long long int x_double)
{
    return {2 * x_double};
}

推荐阅读