Возможны ли шаблонные литералы в C ++? - PullRequest
0 голосов
/ 28 декабря 2018

Я хотел бы создать литерал для класса шаблона, возможно ли это в 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 от того, что присваивает тип?

1 Ответ

0 голосов
/ 28 декабря 2018

Нет, такого нет;единственный шаблонный литерал для строк.Но то, что вы хотите, возможно через тип оболочки:

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