Я хочу создать класс шаблона для общих операторов. Класс будет иметь два представляющие структуры значения в качестве входных данных:Функция шаблона в качестве параметра шаблона
struct Value {
DataType type;
size_t dataSize;
char* data;
};
Я уже написал тип вычет с OLDSCHOOL включений случаев. После броска из-данных PTR к типу, я хочу, чтобы применить операцию на входных значений, как это:
template<class Operation>
class ApplyOperation {
Value* operator()(const Value* a, const Value* b) const {
//find type of a and b
//cast a and b to their types
Operation<aT,bT> op;
return op(a,b);
}
};
Теперь я мог бы написать для каждой операции немного-структуру, как это:
template<class A, class B>
struct Add {
A operator()(A a, B b) const { return a + b; }
};
Я видел класс буксировки под названием операторов: http://www.boost.org/doc/libs/1_59_0/libs/utility/operators.htm
который я хочу использовать для своей цели. Но я не знаю, как его интегрировать, поскольку операторы в структурах не являются функторами. Так было бы возможно использовать его как это ?:
ApplyOperation<boost::addable::operator+> add;
add(a,b);
На самом деле я пытаюсь его для тестирования с этим классом:
template<template<class T, class U, class...> class OperatorClass,class F>
struct ApplyOperator {
template<class T, class U>
T foo(T a, U b) {
OperatorClass<T,U> opClass;
return opClass.operator+(a,b); //this works of course
}
};
То, что я хочу, чтобы это:
template<template<class T, class U, class...> class OperatorClass,class F>
struct ApplyOperator {
template<class T, class U>
T foo(T a, U b) {
OperatorClass<T,U> opClass;
return opClass.F(a,b);
}
};
конкретизированных так:
ApplyOperation<boost::addable, operator+> add;
Это не работает, конечно, из-за неизвестного оператора типа +. Итак, как я могу вызвать оператор + -функция с шаблонами?
Есть ли способ решить эту проблему?
Пожалуйста, напишите [mcve] того, что вы пытаетесь сопутствовать –
http://pastebin.com/yihHAMR0 – Paul