写一个宏

时间:2010-11-12 16:28:47

标签: c++ macros c++11 c-preprocessor

我想如何实现一个可以做到这样的宏:
//伪代码

#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 个答案:

答案 0 :(得分:2)

回答编辑部分。 即使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 :(得分:1)

如果你有C ++,你不应该实现宏!

你想做什么?

答案 2 :(得分:1)

不要使用宏,请使用内联函数。我不确定在这种情况下它会返回什么,但这是一个问题。

答案 3 :(得分:0)

#define CHOOSE(X) (return(X)?"":nullptr)