Реализация возвращаемого типа автоматической функции C ++ [конечный-возвращаемый-тип] - PullRequest
0 голосов
/ 30 мая 2010

Есть ли макрос, что-то вроде BOOST_AUTO, который позволял бы эмулировать автоматическое возвращение типа возврата функции в C ++?

Я имею в виду что-то типа трейлинг-возврата, http://en.wikipedia.org/wiki/C%2B%2B0x#Alternative_function_syntax

вот что у меня есть:

using namespace boost::fusion;
#define AS_VECTOR(var, expr) BOOST_AUTO(var, as_vector(expr))

AS_VECTOR(b, erase(arguments, advance_c<N>(begin(arguments))));
AS_VECTOR(a, insert_range(b, advance_c<N>(begin(b)), vector_tie(i)));

while (i < upper()(a)) 
{
    //apply<T>(*this, f, a);
    ++i;
}
#undef AS_VECTOR

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

полный исходный код находится здесь: Предложения по синтаксису для краткого выражения математической формулы

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

например, приведенный выше фрагмент кода на самом деле replace_at. попытка превратить его в отдельную функцию приводит к возвращаемому параметру, который имеет глубину 6-7 шаблонов. Выполнимо, но очень грязно.

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

спасибо

1 Ответ

0 голосов
/ 30 мая 2010

Как насчет повышения result_of библиотеки?

http://www.boost.org/doc/libs/1_43_0/libs/utility/utility.htm#result_of

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...