C++ “怎么做?”;大多数人都严重地过度使用了石膏;?

C++ “怎么做?”;大多数人都严重地过度使用了石膏;?,c++,C++,从 什么是改善我的C++程序的最好方法?< /P> 我不能说。这取决于你如何使用它。大多数人低估了抽象类和模板。相反,大多数人严重过度使用强制转换和宏 我以前看到过关于宏的观点,但是“大多数人”在可以做其他事情的时候,会如何处理演员?我在考虑指针转换。“大多数人”可能使用C风格的指针转换。最常见的是将指针强制转换为void*或integer。我经常这样做 很多时候,这是限制与我在另一端的程序。例如,将参数列表传递给pthread_create 当“大多数人”可以做其他事情时,他们会如何处理演员

什么是改善我的C++程序的最好方法?< /P> 我不能说。这取决于你如何使用它。大多数人低估了抽象类和模板。相反,大多数人严重过度使用强制转换和宏

我以前看到过关于宏的观点,但是“大多数人”在可以做其他事情的时候,会如何处理演员?我在考虑指针转换。

“大多数人”可能使用C风格的指针转换。最常见的是将指针强制转换为void*或integer。我经常这样做

很多时候,这是限制与我在另一端的程序。例如,将参数列表传递给pthread_create

当“大多数人”可以做其他事情时,他们会如何处理演员

你对指针的猜测听起来是对的

考虑以下代码:

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();
    }
}
第一个例子“滥用”了动态演员阵容。第二,是“做点别的”

编辑:Xephon正在生成的点也有效

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


例如,看C<代码>定义MIN <代码> >代码> >定义Max < /C> > C++ >代码:ST::MIN < /C> >和代码> STD::MAX (C版本有很多问题,甚至不好笑)。在动态绑定方面,人们低估了抽象类和模板。这导致了不必要的转换和宏的使用,在这种情况下,可以使用更好的面向对象设计,在这种情况下广泛地使用多态性。如果有一个问题,我们还可以再问下去,“我们什么时候有C++标准?”,这篇文章可能已经在15年前写过了。如果是这样的话,它可能从那以后就没有更新过(当然,许多常见问题解答是最近更新的)。我真的不担心“大多数人”做了什么。@SteveJessop问了这个问题,是的,但答案是更新的。Re宏:模板代码、常量和内联!经过思考,我接受了这一点,因为我认为这更接近预期的意义。

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();
}