1

私が行った場合:

(gdb) b nmspace::TestClass::compareFOO

次に、次のメソッド署名がブレークポイントとして署名されます。

nmspace::TestClass::compareFOO(blah::Foo const&, blah::Foo const&, unsigned int)
nmspace::TestClass::compareFOO(blah::Foo const&, blah::FooField const&, unsigned int)
nmspace::TestClass::compareFOO(blah::FooField const&, blah::Foo const&, unsigned int)
nmspace::TestClass::compareFOO(blah::FooField const&, blah::FooField const&, unsigned int)

次のようなものはありますか、それともテンプレートメソッドのために毎回4つ書く必要がありますか?ポリモーフィズムはC++テンプレートにも適用されませんか?

nmspace::TestClass::compareFOOES<blah::Foo, blah::Foo>
nmspace::TestClass::compareFOOES<blah::Foo, blah::FooField>
nmspace::TestClass::compareFOOES<blah::FooField, blah::Foo>
nmspace::TestClass::compareFOOES<blah::FooField, blah::FooField>

nmspace::TestClass::compareFOOES、、、などnmspace::TestClass::compareFOOES*を試しました。nmspace::TestClass::compareFOOES<>()

4

1 に答える 1

1

すべての関数の本体が同じである場合は、std::enable_ifまたはを使用して複数のタイプのパラメーターを受け入れることができるグローバル関数を記述できboost::enable_ifます。

template< class T >
struct is_valid_field
    : boost::or_<boost::is_same<T, blah::Foo>, boost::is_same<T, blah::FooField>>
{
};

template< class T, class Q >
nmspace::TestClass::compareFOO(T const&, Q const&, unsigned int,
    typename boost::enable_if<
        boost::and_<is_valid_field<T>, is_valid_field<Q>
    >::type* = 0)
{
    // implementation
}
于 2012-12-21T19:19:54.030 に答える