Я разрабатываю класс c ++ для переноса объекта и его функций-членов. Как объект может быть изменен, так что я думаю, возможно ли использовать какой-то механизм, например шаблон. Вот пример:
class ObjectA
{
public:
void funcA1(double);
void funcA2(int, char);
private:
int value;
};
class ObjectB
{
public:
void funcB1(double);
void funcB2(int, char);
private:
int value;
float point;
};
Теперь мне нужно разработать класс, который может легко обернуть ObjectA
или ObjectB
. Конечно, ObjectA
и ObjectB
не наследуют ни один родительский класс, и они должны иметь две функции, имена функций не совпадают, но параметры должны быть одинаковыми, как и funcA1
funcB1
и funcA2
funcB2
.
Я думаю, что код, приведенный ниже, должен работать.
template<typename T, typename funcAT, typename funcBT> // T: Object, funcAT: Object::funcA, funcBT: Object::funcB
class Wrapper
{
// ...
};
Хорошо, если код работает, есть ли какой-нибудь метод, чтобы сделать больше ограничений? Например, как убедиться, что funcAT
должен принадлежать T
, а не другим функциям? как убедиться, что funcAT
должен иметь только один параметр double
вместо других случаев?
Что я имею в виду:
ObjectA objA;
Wrapper<objA, objA::funcA1, objA::funcB1> wrapper; // no error
Wrapper<objA, other_funcA, other_funcB> wrapper; // ERROR