是的。当您需要操作符实现的虚拟函数行为时使用此技术:您可以使用虚拟(或抽象)函数来定义操作符,并让专业化来决定如何实现该函数。
例如:
class base
{
// yada yada yada
base& operator=(const base& other) { return assign(other); }
protected:
virtual base& assign(const base& other) = 0; // specializations will decide
// what assignment means
};
编辑:另一个使用了该技术,让您的类的特例来控制更复杂的操作只有部分:
class database
{
public:
void execute(const std::string& query)
{
begin_transaction(); // in practice, this should be RAII
connection_.execute(query);
end_transaction();
}
protected:
virtual void begin_transaction() = 0;
virtual void end_transaction() = 0;
private:
whatever &connection_;
};
在数据库中特,一假设mysql_database::begin_transaction
将具有与sqlite_database::begin_transaction
不同的实现。
+1。当然,有时候“尝试它”会导致诸如“y = x ++ + x ++”这样的事情 - 它会“有效”,但不会“每次都正确运行”。所以只是因为某些方法有效,并不意味着它是可以接受的,甚至是对的。 – 2013-03-13 17:37:57