myself--を繰り返すことにして#define
に頼る必要がなく削減するために - 私は、次のような何かしたいと思います。一方でC++クラス宣言でクラス名をテンプレート化することは可能ですか?
template <class T>
class T final: public Base
{
public:
T();
virtual ~T();
private:
void method1(T const& that);
const T* method2(char const*); // was pure-virtual in Base
};
を、私はこれがあるため禁止されて怖いですよテンプレート上で、それを呼び出すために、独自の名前がありません:
typedef ???<DerivedFOO> DerivedFOO;
が、一方で、私はので、多分このことISNを行うにはいくつかの方法があり、C++テンプレートは自身チューリング完全言語であることを理解あまりにもひどく畳み込まれていない?それが最も説得力のある答えなってしまう場合
「#define
を使用すると、あなたのニーズを達成するために、少なくとも、難読化の方法です」と答える
は私に受け入れられるだろう。
私は現在C++ 11に固執しています。しかし、言語の新しい反復回数に依存答えはまだ受け入れられる(私は自分のニーズは何か他のものを必要としていても、一般の聴衆のために最善と思われる答えを受け付けます。)
?プログラミング言語では、名前には何があるのですか?変数、クラスなどの名前を一貫して変更しても、プログラムの実行方法には影響しません。もちろん、あなたは反射を使用していない限り。しかし、C++にはほとんど反映されていません。だから私は目的を見ていない。たぶん、反復が実際に発生するコードを追加した場合、より明確になりますか?繰り返しは問題だと主張しますが、私はどのように正確に見えません。 –
@NirFriedmanに同意するつもりです。問題は曖昧です。あなたが達成しようとしていることをかなり理解していない。 – dwwork
公正な質問。私はすべて同じインターフェースを持ちますが、実装が異なる3つのクラスを持っています。コンパイラがそれらを異なる型であると考えるようにしたい。私は本質的に私のヘッダーファイルで3回同じクラス宣言をすることを避けたい。 (ちょうどそれをDRYにしておきます。)dwworkの答えが出るまで、テンプレートをパラメータ化する唯一の変種は、派生クラスの名前でした。しかし、私のメソッドの1つはType()で、それぞれ異なるDerivedFOOに固有の列挙値を返すことが分かりました。私の解決策があるかもしれません。 –