2016-12-08 10 views
1

この地域で私の無知を許してください。私はそのコンセプトが何であるかを知らないので、何を検索するのか分からない。テンプレートクラスの「すべてのパラメータ化された型」または「すべての引数リスト」の指定方法

は、私は別のインターフェイスにdynamic_castする必要があり、その後、私はメソッドを呼び出す必要があります。しかし、インターフェイスはパラメータ化されているので、「すべてのパラメータ化された型」とはどのように言わなければなりません。それは私がこれを行う方法を知らない(擬似コード):

template <class One, class Two> 
class Foo : public Bar {...}; 

class Baz 
{ 
    ... 
    // Or Foo<*>& = dynamic_cast<Foo<*>&>(bar); 
    Foo& foo = dynamic_cast<Foo&>(bar); 
    foo.SomeMethod(...); 
}; 

私はCスタイルのキャストを試みるときに同様のエラーが発生します。コンパイルが進行しないかのように、私が専門化またはインスタンス化(???)を選択しない限り、私がしたいのは、それらのすべてに対して同じアクションを実行することだけです。

実際のコードはもう少し複雑で、誤差はほとんど理解不能です。しかし、私は別のインタフェース上に存在するメソッドを呼びたいので、エラーが発生します。パラメータが何であるかは気にしません。私が興味の界面に存在する方法を得ることができるので、

どのように私は、「すべてのパラメータ化された型」または「すべての引数リスト」を指定するのですか?あなたはにあなたのオブジェクトをキャストすることはできません、あなたの例ではclass Foo

error C2955: 'Foo' : use of class template requires template argument list 
+0

n.m @。 - 遅く返事を申し訳ありません...私はこの質問を削除し、MCVEで新しい質問をします。 – jww

+0

@ n.m。 - 私は質問を削除することができなかったので、私は司会者のためにそれをフラグしなければならなかった。申し訳ありません。 MCVEの新しい質問は、[dynamic_castの "すべてのパラメータ化された型"または "すべての引数リスト"を指定する方法](http://stackoverflow.com/q/41049526) – jww

答えて

1

異なる専門分野が異なるだけクラスで、それらの間に何らかの関係がありませんので、:ここで


は、Microsoftのコンパイラからのエラーです未知のクラス。

Hovewer、あなたはこのように、これらのインタフェース間の継承関係を作成することができます。

// The interface containing everything which should be shared between Foo<T1, T2> 
class FooBase : public Bar 
{ 
public: 
    virtual void SomeMethod(...) = 0; 
}; 

// The specifics of Foo<T1, T2> 
template<typename One, typename Two> 
class Foo : public FooBase 
{ 
... 
}; 

// Usage example 
class Baz 
{ 
    ... 
    FooBase& foo = dynamic_cast<FooBase&>(bar); 
    foo.SomeMethod(...); 
}; 
+0

私の無知を許して...そう'reinterpret_cast'やCスタイルで必要なタイプにキャストする必要がありますか?詳細はこれを読んでください、私は型の安全性のために 'dynamic_cast'を使用しようとするが、仕事のための間違ったツールなら、私はそれを放棄して幸せだよ... – jww

+0

' dynamic_cast'はここ – alexeykuzmin0

+0

@jwwあなたの一品です:http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-const-cast-and-reinterpret-cast-be-used – alexeykuzmin0

関連する問題