Здравствуйте, rg45, Вы писали:
R>Здравствуйте, Andrew001, Вы писали:
A>>Есть некая функция которую нужно сделать элементом нескольких классов
A>>1 — это сделать родительский класс в котором и объявить эту функция
A>>2 — это сделать глобальную функцию к которой обращаться из промежуточных функций-членов этих классов
A>>Оба эти варианта не очень подходят
A>>Какие еще есть варианты?
A>>Возможно ли это сделать через шаблоны?
R>Возможно, например:
R>R>#include <iostream>
R>#include <string>
R>template<typename T, typename V>
R>void set_value(T& item, const V& value)
R>{
R> item.value = value;
R>}
R>struct A
R>{
R> int value;
R>};
R>struct B
R>{
R> std::string value;
R>};
R>int main()
R>{
R> A a;
R> B b;
R> set_value(a, 123);
R> set_value(b, "hello");
R> std::cout << a.value << std::endl; //output: "123"
R> std::cout << b.value << std::endl; //output: "hello"
R>}
R>
нужно чтобы вызов остался прежним
a.set_value(...)
b.set_value(...)
Нет ли какойто возможности типа:
template<typename T>
void T::set_value(...)
ну а в классах:
class A
{
void set_value(...);
};
class B
{
void set_value(...);
};