小编Ide*_*Hat的帖子

宏元编程

我知道这可能是不好的或不可能的,但是由于这不是递归宏,所以我认为应该是可能的。

#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-preprocessor

3
推荐指数
1
解决办法
161
查看次数

如何调用C++函数C++/CLI

我已经查看过很多在线搜索,大多数都有C#与C或C++一起讨论C#的例子,但从未遇到过使用C++调用C DLL(特别是在我的情况下使用带有WPF的C++/CLI).

有人可以用一个例子来解释如何在C++中调用C DLL函数.我有一个C DLL,其所有函数都定义为extern"C"funcName(),还有一个导出函数.def文件,其中包含所有需要导出的函数名.现在有了这个C DLL,我如何在C++代码中调用它的导出函数.

谢谢.

c c++ dll c++-cli

2
推荐指数
1
解决办法
3639
查看次数

c ++ 11的"移动工厂"

我想创建一个工厂样式生成器,它接收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++ move-semantics

1
推荐指数
1
解决办法
725
查看次数

在C++ 98,C++ 11交叉编译代码中处理覆盖的优雅方式?

我有一些代码具有可选的内置代码,试图检测C++ 0X.让我假装这是有效的(讨论有多糟糕,如何不跨越平台超出这个问题的范围).让我们说它有一个#define DETECTCXX0X.iff它是C++ 0X.

这样做有多糟糕:

#ifndef DETECTCXX0X
#define override
#endif
Run Code Online (Sandbox Code Playgroud)

你还有其他选择吗?

(我想正确的做法是不使用显式覆盖).

c++ macros overriding c++11

0
推荐指数
1
解决办法
1133
查看次数

标签 统计

c++ ×3

c ×2

c++-cli ×1

c++11 ×1

c-preprocessor ×1

dll ×1

macros ×1

move-semantics ×1

overriding ×1