Отдельный шаблон для типов typdef

Я создал шаблонный класс, который выводит значения на основе их типов данных, то есть long получает вывод в виде целого числа со знаком (десятичное число), тогда как RESULT получает вывод в шестнадцатеричном формате. Я определил RESULT как:

typdef long RESULT.

Это не работает правильно, потому что RESULT рассматривается как long а также RESULTВыходная подпрограмма никогда не вызывается (вместо longрутина называется). Есть ли обходной путь для этого?

0

Решение

То, что вы хотите, не будет работать по указанным причинам.

Как насчет простого добавления объекта Function, который форматирует вывод, как вы хотите.

class A {
template< typename T>
std::string output(long val) {return T(val)}
}

struct decimal {
std::string operator()(long val) {//return decimal}
}

struct hex {
std::string operator()(long val) {//return hex}
}

Пример использования:

A a;
cout << a.output<decimal>(10) << endl;
cout << a.output<hex>(10) << endl;
2

Другие решения

Это ожидается.

Определение типа не изменяет то, как компилятор видит тип — оно создает новое имя для типа, в данном случае RESULT, и, поскольку он того же типа, он ведет себя и использует тот же код, что и указанный тип, в этом дело длинное

1

typedef объявляет только alias для типа. Вы можете использовать некоторыеtemplate magic«для вашего примера.

template<typename T, int I>
struct true_typedef
{
explicit true_typedef(const T& val):value(val) { }
T value;
};

typedef true_typedef<long, 0> RESULT;

пример.

http://liveworkspace.org/code/1fc907ae5cddc23bd7d9545cfafa8a05

1
По вопросам рекламы [email protected]