派生クラスで保護されたコンストラクタを実行するメカニズムはありますか?クラスを生成する際に保護されたコンストラクタを適用する
簡単な例:
template<typename T>
class Factory;
class Base {
template<typename T>
friend class Factory;
protected:
Base();
};
class Child : public Base {
public:
Child(); // this should lead to a compile time error
};
<template T>
class Factory {
Base* GetNew()
{
BOOST_STATIC_ASSERT(boost::is_base_of<Base, T>::value);
Base* b = new T();
b->doStuff();
return b;
}
};
だから私は、子供のクラスは、工場でのみ作成可能と基地から派生するすべての子クラスは、保護されたコンストラクタを持っていることを強制します。
ありがとう、この非常に良いアイデア。私は実際にはすでに同様のことについて実際に考えていました。私もあなたの答えを受け入れたいと思いますが、残念ながら私は1つしか受け入れることができません。 – Chris
これは問題ありません。私は栄光のためにこれをしません。 (a)それは私に警告を覚えさせ、(b)私はC++が素晴らしい言語だと思ってしまい、それがうまく使用されているのが好きだからです。 –