Можно ли изменить определенные типы классов без копирования класса в C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Можно ли изменить определенные типы классов без копирования класса в C++?

Сообщение Anonymous »

Я пытаюсь создать класс в C++, который имеет переменные, скажем, int и функцию, которую я буду вызывать foo в производном классе, а затем изменить его так, чтобы все int теперь являются двойными. Это пример:
template
class BaseT {
public:
using variable = std::conditional_t;
BaseT() = default;
virtual variable foo(variable var) {return 0;}
};

using Base = BaseT;
using BaseDouble = BaseT;

class Derived : public Base{
public:
variable a, b, c;
Derived()
:a(10), b(20), c(30)
{}

variable foo(variable var) override {
return var * a * b * c;
}
};

double runDerivedDouble(Derived& cls){
//in here I want to convert Derived to a version where the "variable"
//types are all floats instead of ints, and then run foo
}


По сути, мне интересно, возможно ли создать макрос, который создает отдельный класс, в котором содержимое foo такое же, как и у класса Derived, но тип переменная просто изменяется, и для меня создается отдельный класс.
Например, если бы я создал класс, выполняющий это, и назвал его DerivedDouble, вот как бы это выглядело . Однако моя цель состоит в том, чтобы мне не пришлось посещать этот урок. Мне нужен способ использовать макрос или что-то подобное, чтобы сгенерировать это и что foo выведет из класса DerivedDouble ниже. Мне действительно просто интересно, возможно ли это, и таким образом, чтобы мне не приходилось добавлять шаблон в Derived? По сути, мне интересно, смогу ли я создать версию класса, в которой шаблон базового класса можно будет изменить?
class DerivedDouble : public BaseDouble{
public:
variable a, b, c;
Derived()
:a(10), b(20), c(30)
{}

variable foo(variable var) override {
return var * a * b * c;
}
};


Подробнее здесь: https://stackoverflow.com/questions/791 ... class-in-c
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»