Написание макроса - PullRequest
0 голосов
/ 12 ноября 2010

Как я предполагаю реализовать макрос, который будет делать что-то вроде этого:
// псевдокод

#define CHOOSE(X) if(X) expand to "" and if !X expand to return nullptr;

Редактировать

template<class SomePolicy>
struct M
{

template<class Policy = SomePolicy>
typename std::enable_if<IsThrow<Policy>::value,void>::type fnc()
{
}

template<class Policy = SomePolicy>
typename std::enable_if<!IsThrow<Policy>::value,std::nullptr_t>::type fnc()
{
    return nullptr;
}
};  

@ All_WHO_TRIED_TO_HELP_ME Эй, ребята, я хочу поблагодарить вас за вашу бесценную помощь. Это не могло быть сделано без тебя. Всем спасибо. Спасибо.

Ответы [ 4 ]

2 голосов
/ 12 ноября 2010

Ответ для редактирования раздела.Используйте тот факт, что выражение return g(); является действительным, даже если g возвращает void.

template <class T> T GetDefault() { return T(); }
template <> void GetDefault<void>() {  } // special case for void

и используйте

return GetDefault<void>();

или

return GetDefault<std::nullptr_t>();
1 голос
/ 12 ноября 2010

Не используйте макрос, используйте встроенную функцию.Я не уверен, что он вернет в этом случае, но в любом случае это проблема.

1 голос
/ 12 ноября 2010

Вы не должны реализовывать макросы, если у вас есть C ++!

Что именно вы хотите делать ???

0 голосов
/ 12 ноября 2010
#define CHOOSE(X) (return(X)?"":nullptr)
...