需要一些帮助来编写EMPTY_OR宏
Need some help writing an EMPTY_OR macro
我正在尝试编写一个名为EMPTY_OR
的宏,该宏将返回第一个参数,但如果它为空,它将返回第二个参数。
到目前为止,我拥有的是:
#include <iostream>
#define EMPTY_OR(x, y) ( (sizeof(#x) > sizeof("")) ? (x) : (y) )
#define TEST(x, y) EMPTY_OR(y, x)
using namespace std;
int main()
{
int four = TEST(4, );
int eight = TEST(4, 8);
cout << "four: " << four << endl;
cout << "eight: " << eight << endl;
return 0;
}
它很接近,但不起作用,因为main
函数的第一行扩展到以下内容:
( (sizeof("") > sizeof("")) ? () : (4) )
该条件永远不会为真,因此永远不会对()
进行求值。我不应该关心它,但编译器关心它,它显示了一个错误。
我如何用最简单、符合标准(或者至少符合MSVC)的方式来解决它?
如果我理解您要正确执行的操作,我会删除sizeof并检查字符串中的第一个字符是否为