小编Dis*_*Stu的帖子

简化C++ 03方式的接口声明

作为减少复制/粘贴相同代码的繁忙工作的一种方法,我转向黑暗的一面并使用宏来为我做.

请记住,这是来自更大的生产代码,如果没有这样的宏,任务会更加痛苦.具体来说,它是由单个字符串驱动的静态和虚拟函数的混合.

现在我知道宏可以让你遇到麻烦,并且这种方式使用它们非常"臭",所以我想要更好的东西,但是我很难想出一些简单明了的东西:

#define LAZY(name)\
   static const char * identify() { return name; }\
   virtual const char * getName() { return identify(); }

class A{
public:
   LAZY("class A")

   void foo(){
      std::cout << getName() << std::endl;
   }
};

class B: public A{
public:
   LAZY("class B")
};

std::string somevar( B::identify() );

int main(void){
   B b1;
   B.foo();
}
Run Code Online (Sandbox Code Playgroud)

我采取的其他一些方法(以及它们失败的原因)如下:

template<class T>
class Base{
public:
   virtual const char * getName(){ return T::identify(); }

   // All other functions driven by string. IE:
   static void register(){ …
Run Code Online (Sandbox Code Playgroud)

c++

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

标签 统计

c++ ×1