Создание нулевых указателей из пакета параметров шаблона c ++ 11 - PullRequest
3 голосов
/ 26 октября 2011

Я занимаюсь метапрограммированием, и сейчас мне нужно проверить, может ли функция-член данного типа вызываться с заданным набором аргументов, поэтому я делаю что-то вроде следующего (что сильно упрощается, если удалить всеконечно, это не важно для этой конкретной проблемы):

template<typename T, typename... Args>
struct argument_tester {
    struct base: public T { 
        using T::my_member; 
        no my_member(...){}
    };
    typedef decltype(static_cast<base*>(0)->my_member(*static_cast<Args*...>(0))) type;
    //verify return type
};

Конечно, это не работает с *static_cast<Args*...>(0), поэтому мой вопрос в том, есть ли способ распаковать пакет параметров в виде нулевых указателей с разыменованными ссылкамиесли это тот случай, когда я должен специализироваться для каждого количества аргументов.И конечно, если есть способ, как бы я это сделал?Я использую gcc 4.6 в случае, если это имеет значение для того, что возможно, а что нет.

1 Ответ

8 голосов
/ 26 октября 2011

Оператор ... unpack может быть помещен вне выражения, и в этом случае выражение будет расширено.

Таким образом, я думаю, решение будет (*static_cast<Args*>(0))....

РЕДАКТИРОВАТЬ : после подсказки Р. Мартиньо Фернандеса

typedef decltype(std::declval<base>().my_member(std::declval<Args>()...)) type;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...