Есть класс в котором три указателя на разные типы, и есть одна функция self() которая должна вернуть один из этих указателей вот что я должен указать в типе возврата у self().
class Object
{
int* ptr1;
char* ptr2;
double* ptr3
???self()
{
return ptr1 или ptr2 или ptr3 по ситуации;
}
}
C/C++
C++, Как сделать тип возврата из функции по ситуации / динамический? P.S.auto не поможет
// Предлагаю шаблон!
#include <iostream>
using namespace std;
template<typename Type>
class Pointer {
public:
Pointer() : pointer(new Type) {}
Pointer(const Pointer& o) : pointer(new Type) {
*pointer = *o.pointer;
}
Pointer(Pointer&& o) : pointer(new Type) {
pointer = forward<Type*>(o.pointer);
o.pointer = nullptr;
}
Pointer& operator=(const Pointer& o) {
if (&o != this) *pointer = *o.pointer;
return *this;
}
Pointer& operator=(Pointer&& o) {
pointer = forward<Type*>(o.pointer);
o.pointer = nullptr;
return *this;
}
~Pointer() {
if (pointer != nullptr) {
delete pointer;
pointer = nullptr;
}
}
void value(const Type& value) {
*pointer = value;
}
Type value()const {
return *pointer;
}
Type* self()const {
return pointer;
}
private:
Type* pointer;
};
int main() {
Pointer<char> char_pointer;
char_pointer.value('w');
auto char_self = char_pointer.self();
Pointer<int> int_pointer;
int_pointer.value(25);
auto int_self = int_pointer.self();
Pointer<double> double_pointer;
double_pointer.value(12.5);
auto double_self = double_pointer.self();
system("pause > nul");
}
#include <iostream>
using namespace std;
template<typename Type>
class Pointer {
public:
Pointer() : pointer(new Type) {}
Pointer(const Pointer& o) : pointer(new Type) {
*pointer = *o.pointer;
}
Pointer(Pointer&& o) : pointer(new Type) {
pointer = forward<Type*>(o.pointer);
o.pointer = nullptr;
}
Pointer& operator=(const Pointer& o) {
if (&o != this) *pointer = *o.pointer;
return *this;
}
Pointer& operator=(Pointer&& o) {
pointer = forward<Type*>(o.pointer);
o.pointer = nullptr;
return *this;
}
~Pointer() {
if (pointer != nullptr) {
delete pointer;
pointer = nullptr;
}
}
void value(const Type& value) {
*pointer = value;
}
Type value()const {
return *pointer;
}
Type* self()const {
return pointer;
}
private:
Type* pointer;
};
int main() {
Pointer<char> char_pointer;
char_pointer.value('w');
auto char_self = char_pointer.self();
Pointer<int> int_pointer;
int_pointer.value(25);
auto int_self = int_pointer.self();
Pointer<double> double_pointer;
double_pointer.value(12.5);
auto double_self = double_pointer.self();
system("pause > nul");
}
Ну, можно возвращать void*, а потом кастить к нужному типу.
P.s А может имеет смысл сделать класс шаблонным?
P.P.s Если скажешь, что ты вообще пытаешься сделать, то мы, возможно, сможем дать более конкретный ответ.
P.s А может имеет смысл сделать класс шаблонным?
P.P.s Если скажешь, что ты вообще пытаешься сделать, то мы, возможно, сможем дать более конкретный ответ.
#include< variant >
class Object
{
variant< int*, char*, double* >storage;
public:
template< typename T >
T self()
{
return get< T >(storage);
}
};
Только это бесполезно, их всё равно надо как-то инициализировать
class Object
{
variant< int*, char*, double* >storage;
public:
template< typename T >
T self()
{
return get< T >(storage);
}
};
Только это бесполезно, их всё равно надо как-то инициализировать
Levon Mkhitaryan
А разве функции могут отличаться только типом возвращаемого значения?
Нет в плюсах такого дерьма
Можно сделать union, но нет никакого способа узнать, какой тип в него положили.
Если это адекватная необходимость, пилите класс-обёртку.
Можно сделать union, но нет никакого способа узнать, какой тип в него положили.
Если это адекватная необходимость, пилите класс-обёртку.
Похожие вопросы
- Как в функции распечатать двумерный динамический массив в Си
- C++. Как сделать ввод переменной (размера) на основе которой будет ввод массива?
- Создать простой класс, конструктор, и несколько функций. Не могу решить задачу, плохо понял тему, помогите пожалуйста.
- Размер динамического массива, передаваемого в функцию в C++.
- Сделать перестановку чисел с помощью функции в C++, но у меня получается чепуха
- Почему динамический массив напрямую в функцию передать нельзя, а динамический массив указателей можно?
- Помогите решить задачу, c++, функции
- Как работать с элементами динамического массива из функции?
- C++ программирование с использованием динамических двумерных массивов
- C++ динамический массив