我想知道是否可以编写一个行为如下的宏:
void Func(int x)
{
printf("%d",x);
}
#define func Func x //or something
int main()
{
func 10; //<---- remove parenthesis
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,func将指向真实函数Func,而10将是没有括号的参数.
我试图new在C++中实现类似于运算符的东西但在C中.
例:
class Base* b = new(Base);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,class是一个宏struct,new是一个带函数指针的函数,Base是一个为其分配内存的函数struct Base.
我想将代码重写为这样的代码:
class Base* b = new Base;
Run Code Online (Sandbox Code Playgroud)
如果我能想出一个宏,那将是可能的:)
让我们看看下面的代码:
#include <iostream>
class Test
{
private:
int x;
public:
Test(int _x) :
x(_x)
{
std::cout << "Im being constructed" << std::endl;
}
int getx()
{
return this->x;
}
friend std::ostream& operator<<(std::ostream& os, Test& other)
{
os << other.getx();
return os;
}
};
auto func(auto x)
{
std::cout << x << std::endl;
return x.getx();
}
int main()
{
auto y = func(20);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译器如何确定(20)是int还是Test对象?Test的构造函数不明确,那么标准对它有什么看法呢?