来自http://www.stroustrup.com/bs_faq.html#improve-my-C++-programs
问:改进我的C ++程序的最佳方法是什么?
答:我不能说。这取决于你如何使用它。大多数人低估了抽象类和模板。相反,大多数人严重过度使用演员表和宏。
我之前看到过关于宏的观点,但是“大多数人”在演员表演的时候做了什么呢?我正在考虑指针演员。
答案 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::min
和std::max
(C版本有很多问题,甚至不好笑)
答案 1 :(得分:2)
“大多数人”可能正在使用C样式指针强制转换。最常见的是将指针强制转换为void *或整数。我做了很多......
很多时候,这与我在程序另一端的内容有关。就像把参数列表传递给pthread_create一样,按照说法。