我知道这可能是不好的或不可能的,但是由于这不是递归宏,所以我认为应该是可能的。
#define FOO 15
#define MAKE_BAR(x) BAR_##x
#define MY_FOO_BAR MAKE_BAR(FOO)
Run Code Online (Sandbox Code Playgroud)
我希望MY_FOO_BAR评估为BAR_15。有没有办法告诉预处理器在将FOO传递给MAKE_BAR之前对其进行评估?
我已经查看过很多在线搜索,大多数都有C#与C或C++一起讨论C#的例子,但从未遇到过使用C++调用C DLL(特别是在我的情况下使用带有WPF的C++/CLI).
有人可以用一个例子来解释如何在C++中调用C DLL函数.我有一个C DLL,其所有函数都定义为extern"C"funcName(),还有一个导出函数.def文件,其中包含所有需要导出的函数名.现在有了这个C DLL,我如何在C++代码中调用它的导出函数.
谢谢.
我想创建一个工厂样式生成器,它接收A并输出A,RA的子类(它向A添加信息).我不能想到一个安全的方法来做到这一点.
结构体:
class A
{
public:
std::string str;
A(std::string a)
{
str = a;
}
A(A&& a) :
str(std::move(a.str))
{
}
};
class AR : public A
{
public:
std::string str1;
AR(std::string a,std::string b) : A(a)
{
str1 = b;
}
AR(A &&a,const std::string& b)
: A(std::forward<A>(a))
{
str1 = b;
}
AR(AR&& ar)
: A(std::forward<A>(ar)),
str1(std::move(ar.str1))
{
}
};
class ARFactory;
Run Code Online (Sandbox Code Playgroud)
最安全的方式可能是
AR GenerateRA1(A&& a)
{
return AR(std::forward<A>(a),std::string("foo"));
}
Run Code Online (Sandbox Code Playgroud)
这将强制a被破坏.问题是,这会导致用户在函数调用之前无法以任何方式使用a的参数,这可能很烦人:
ARFactory fact;
{
AR ar=fact.GenerateRA1(A("bar"));//compiles
}
{
A a("bar"); …Run Code Online (Sandbox Code Playgroud) 我有一些代码具有可选的内置代码,试图检测C++ 0X.让我假装这是有效的(讨论有多糟糕,如何不跨越平台超出这个问题的范围).让我们说它有一个#define DETECTCXX0X.iff它是C++ 0X.
这样做有多糟糕:
#ifndef DETECTCXX0X
#define override
#endif
Run Code Online (Sandbox Code Playgroud)
你还有其他选择吗?
(我想正确的做法是不使用显式覆盖).