Как я могу создать переменную того же типа, что и другая, используя шаблоны? - PullRequest
1 голос
/ 21 июня 2010

Я хотел бы создать переменную, которая соответствует типу другой переменной посредством шаблона, так что, если другая переменная когда-либо изменит тип для соответствия, переменная, полученная из нее через шаблон, также изменит свой тип.

Как я могу сделать это с шаблонами в C ++?

Цель состоит в том, чтобы при чтении с диска во временную переменную количество байтов, считываемых с диска, точно совпадало с фактической переменной. В этом случае я собираюсь проигнорировать значение, поэтому не хочу читать фактическую переменную, но мне нужно убедиться, что я прочитал правильное количество байтов, прежде чем двигаться дальше, чтобы сохранить синхронизацию.

Ответы [ 2 ]

2 голосов
/ 21 июня 2010

С нынешним стандартом, я не думаю, что вы можете сделать это без каких-то действительно жестких трюков метапрограммирования.Решение не было бы идеальным.edit> На самом деле я думаю, что это невозможно.

Следующий стандарт предоставит оператор decltype, который позволит вам получить тип переменной или выражения:

A a;
decltype(a) b; // b is of type A

Если вы используете недавний компиляторКак и MSVC10 или Gcc4.5, эта функция уже доступна (также проверьте ключевое слово auto).

1 голос
/ 21 июня 2010

Если в вашем компиляторе нет decltype, вы можете написать функцию шаблона для этого. Это некрасиво, но это сделает работу.

template<typename T>
T read_alike(int fd, T const &unusedVar)
{
    T realVar;
    if (::read(fd, &realVar, sizeof(realVar)) != sizeof(realVar)
        throw std::runtime_error("read failed or incomplete");
    return realVar;
}

Вы бы назвали это как:

MyClass myObj;

MyClass newObj = read_alike(fd, myobj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...