Вопрос по templates, type-deduction, c++ – Сильные typedefs [дубликаты]

11

На этот вопрос уже есть ответ здесь:

C ++ Сильно типизировано с использованием и typedef 4 ответа

Есть ли способ сделать полную копию типа, чтобы их можно было различить в контексте вывода шаблона? Возьмите пример:

#include <iostream>

template <typename T>
struct test
{
    static int c()
    { 
        static int t = 0;
        return t++;
    }
};

typedef int handle;

int main()
{
    std::cout << test<int>::c() << std::endl;
    std::cout << test<handle>::c() << std::endl;
    return 0;
}

Поскольку typedef создает псевдоним только для типа, он печатает 0, 1 вместо желаемых 0, 0. Есть ли обходной путь для этого?

Взгляни наBoost сильный typedef. interjay

Ваш Ответ

1   ответ
8

cplusplus.com,

Обратите внимание, чтоНи typedef, ни использование не создают новые отдельные типы данных. Они создают только синонимы существующих типов. Это означает, что тип myword выше, объявленный с типом WORD, также может рассматриваться как тип unsigned int; это на самом деле не имеет значения, поскольку оба на самом деле относятся к одному и тому же типу.

посколькуint а такжеhandle являютсяодно и то же, выход0 1 ожидается.

Хотя есть обходной путь, как подсказывает @interjay.

Ты можешь использоватьBOOST_STRONG_TYPEDEF.

BOOST_STRONG_TYPEDEF( int , handle );
Благодаря тебе @interjay, сегодня я узнал что-то новое. :) shauryachats
Это отличная работа. Но вы не должны были принять мой ответ за это. shauryachats
Я не думаю, что есть альтернативаtypedefИменно это я и хочу подчеркнуть. shauryachats
@shauryachats на самом деле я думаю, что я где-то пропустил. Вернуться к принятым! Veritas

Похожие вопросы