3

我有两个类 A 和 B。唯一的字段是数组及其大小。所有方法都完全相同,唯一的区别在于对所有方法采用的索引整数的解释。我想对它进行模板化,以便我可以用 std::plus 实例化一个,用 std::minus 实例化另一个

一点代码:

class AB {
    int dim;
    int *tab;
    public:
    // obvious ctor & dtor
    void fun1( int a, int b );
    void fun2( int a, int b );
    void fun3( int a, int b );
}

void AB::fun1( int a, int b ) {
// operation of "interpretation" here i.e. addition or subtraction of ints into indexing int _num
// some operation on tab[_num]
}

我怎样才能做到这一点?

4

1 回答 1

3

它看起来像这样:

template< typename Op >
void AB::fun1( int a, int b )
{
    Op op;

    tab[ op( a, b ) ];
};

它会像这样实例化:

AB ab;
ab.fun1< std::plus< int > >( 1, 2 );
ab.fun1< std::minus< int > >( 1, 2 );

如果所有方法都发生这种情况,那么模板可能更有意义AB

template< typename Op >
class AB
{
    ... use as above ...
};

这假设操作是无状态的,因此创建这种类型的默认构造对象等效于任何其他实例。在这种假设下,代码甚至可以写成这样Op()( a, b )

于 2013-01-08T05:08:18.873 回答