はい。この手法は、演算子の実装に仮想関数の動作が必要な場合に使用されます。仮想(または抽象)関数の観点から演算子を定義し、特殊化によってその関数の実装方法を決定します。
例:
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
};
編集:このテクニックのもう1つの用途は、クラスの特殊化によって、より複雑な操作の一部のみを制御できるようにすることです。
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
。