“大多数人严重过度使用演员阵容”怎么办?

时间:2013-12-06 16:12:41

标签: c++

来自http://www.stroustrup.com/bs_faq.html#improve-my-C++-programs

  

问:改进我的C ++程序的最佳方法是什么?

     答:我不能说。这取决于你如何使用它。大多数人低估了抽象类和模板。相反,大多数人严重过度使用演员表和宏。

我之前看到过关于宏的观点,但是“大多数人”在演员表演的时候做了什么呢?我正在考虑指针演员。

2 个答案:

答案 0 :(得分:3)

  

当“大多数人”可以做其他事情时,他们会做什么呢?

你对指针的猜测是正确的。

考虑以下代码:

class some_base { /* ... */ };

class some_implementation: public some_base
{ void do_impl_stuff() { /* ... */ } }; // do_impl code is in specialization

糟糕的客户端代码:

void do_stuff(some_base* base)
{
    if(some_implementation* p = dynamic_cast<some_implementation*>(base)) {
        p->do_impl_stuff();
    }
}

更好的选择:

class some_base
{
public:
    virtual void do_impl_stuff() = 0;
    virtual ~some_base() = default;
};

class some_implementation: public some_base
{ virtual void do_impl_stuff() override { /* ... */ } };

void do_stuff(some_base* base)
{
    base->do_impl_stuff();
}

第一个例子“滥用”动态演员表。第二,是“做其他事”

编辑:Xephon正在制作的观点也是有效的。

关于宏的过度使用,您在C ++中使用宏编写的大多数代码都可以(通常使用 )使用模板化代码编写。

例如,请查看C #define min / #define max与C ++ std::minstd::max(C版本有很多问题,甚至不好笑)

答案 1 :(得分:2)

“大多数人”可能正在使用C样式指针强制转换。最常见的是将指针强制转换为void *或整数。我做了很多......

很多时候,这与我在程序另一端的内容有关。就像把参数列表传递给pthread_create一样,按照说法。