2011-09-22 34 views
5

は説明するために:オブジェクト型がテンプレート引数である場合、テンプレート引数をオブジェクト上の関数に渡す方法はありますか?

struct MyFunc { 

    template <size_t N> 
    void doIt() { 
     cout << N << endl; 
    } 

}; 

template <typename Func> 
struct Pass123ToTemplateFunc { 

    static void pass(Func f) { 
     f.doIt<123>(); // <-- Error on compile; is there a way to express this? 
    } 

}; 

int main() { 

    Pass123ToTemplateFunc<MyFunc>::pass(MyFunc()); 

    return 0; 

} 

これはかなり純粋な構文の好奇心です。引数をdoIt関数自体に渡すことなくこれを表現する方法がありますか?そうでなければ、それほど大きな問題ではなく、私はすでに優雅に回避できる方法をよく知っているので、代替ソリューションを提供する必要はありません。 (それが真実だ場合、私は、他の言葉で、答えとして「ノー」受け入れるだろう:-P。)

答えて

8

をあなたはdoItがテンプレートになりますコンパイラに指示する必要があります。

f.template doIt<123>(); 
+1

それは信じられないですそのキーワードの使い方が何回か私の上に潜んでいます。ありがとう! – nonoitall

+0

@nonoitall:詳細については、このFAQを参照してください。[についての ' - >テンプレート'、 '.template'と' :: template'の構文は?](http://www.comeaucomputing.com/techtalk/templates /#templateprefix) – ildjarn

関連する問題