2013-11-21 3 views
0

Привет, ребята, я новичок в C++, и у меня есть вопрос относительно шаблонного функтора, я создаю простой шаблонный функтор самостоятельно, но просто задаюсь вопросом, почему возвращаемое значение всегда «1», когда i попробуйте добавить два значения вместе.C++ Templated Functor

class AddValue{ 
private: 
    int x; 
public: 
    template <class T, class U> 
    bool operator() (const T &v1, const U &v2) 
    { 
     x = v1 + v2; 
     return x; 
    } 
}; 

int main(){ 
    AddValue addvalue; 
    int a = 3; 
    int b = 6; 
    cout<< addvalue(a, b) << endl; 
    return 0; 
} 

ответ

2
bool operator() (const T &v1, const U &v2) // You're returning bool 
//^^ should be T 

Кроме того, вам нужно

T operator() (const T &v1, const U &v2) 
    { 
     T x = v1 + v2; // Notice x type as T 
     return x; 
    } 

См Here

+0

@POW спасибо за быстрый ответ, и я ценю это .. Am я право сказать, что если я буду сравнивать 2 разных значения, чем я бы фактически использовал 'bool operator()', но если я хочу вернуть значение любой функции, то это будет 'T operator()' и что это означает 'T x'? – user2975932

+0

Тип возврата и дополнение очень сложны. T и V могут быть любыми. Но каков результат, когда вы добавляете их вместе? Вы имели в виду, что 'v1' и' v2' того же типа? – andre

+0

@ user2975932 да для сравнения логический результат желательно – P0W