我想如何实现一个可以做到这样的宏:
//伪代码
#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 嘿伙计们,我非常感谢你们的无价帮助。没有你,就无法完成。感谢大家。谢谢。
答案 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)