Size: a a a

2020 May 25

D

Danya in pro.cxx
Danya
Можно сделать например так:
template<std::size_t w, std::size_t h>
class AbstractDisplay {
 static constexpr auto width = w;
 static constexpr auto height = h;
 ...
};

class Display : public AbstractDisplay<240, 240> {};

template <typename D>
class Graphic {     static_assert(std::is_base_of<AbstractDisplay, D>::value);
 std::array<uint8_t, D::width * D::height>;
};
@Dr_Zlo13, я немного подправил static_assert
источник

D

Danya in pro.cxx
Для этого кода нужен С++11
источник

D

Dr Zlo in pro.cxx
Да, у меня с++14
источник

D

Dr Zlo in pro.cxx
Danya
@Dr_Zlo13, я немного подправил static_assert
type/value mismatch at argument 1 in template parameter list for 'template<class, class> struct std::is_base_of'
источник

D

Danya in pro.cxx
Dr Zlo
type/value mismatch at argument 1 in template parameter list for 'template<class, class> struct std::is_base_of'
Загрузи код и ошибку компиляции полностью на paste.ubuntu.com
источник

D

Dr Zlo in pro.cxx
Danya
Загрузи код и ошибку компиляции полностью на paste.ubuntu.com
источник

D

Danya in pro.cxx
Ну нужно же сделать
1)
#include <type_traits>
#include <array>
источник

D

Danya in pro.cxx
2) static_assert(std::is_base_of<AbstractDisplay<D::width, D::height>, D>::value);
источник

YM

Yaroslav M in pro.cxx
👋 камрады, подскажите плз про ооп:
есть метод в базовом классе
def parse_settings(self, data: dict) -> Settings:
   raise NotImplementedError

хочу в методе наследника вернуть сабкласс
def parse_settings(self, data: dict) -> FansSettings:
   ....


что я ломаю с точки зрения здравого смысла?
языку (Python) исключительно пофиг на эту ситуацию
но я, вероятно, делаю что-то не то
источник

YM

Yaroslav M in pro.cxx
?
источник

YM

Yaroslav M in pro.cxx
вопрос как с таким обходятся в C++
источник

AS

Anatoly Shirokov in pro.cxx
Yaroslav M
вопрос как с таким обходятся в C++
в С++ вводится понятие ковариантности
источник

D

Danya in pro.cxx
Yaroslav M
👋 камрады, подскажите плз про ооп:
есть метод в базовом классе
def parse_settings(self, data: dict) -> Settings:
   raise NotImplementedError

хочу в методе наследника вернуть сабкласс
def parse_settings(self, data: dict) -> FansSettings:
   ....


что я ломаю с точки зрения здравого смысла?
языку (Python) исключительно пофиг на эту ситуацию
но я, вероятно, делаю что-то не то
Питону пофиг как минимум потому, что там динамическая типизация и твои тайп хинты на самом деле ничего не значат
источник

YM

Yaroslav M in pro.cxx
Danya
Питону пофиг как минимум потому, что там динамическая типизация и твои тайп хинты на самом деле ничего не значат
конечно да, их я для себя пишу и здесь как пояснение что делать собираюсь
если так написать в C++ оно скомпилится или сругнется?
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Yaroslav M
вопрос как с таким обходятся в C++
pure virtual в базе. В питоне для этого есть какой-то абстрактный базовый класс в abc
источник

AB

Artöm Bakri Al-Sarmi... in pro.cxx
Yaroslav M
👋 камрады, подскажите плз про ооп:
есть метод в базовом классе
def parse_settings(self, data: dict) -> Settings:
   raise NotImplementedError

хочу в методе наследника вернуть сабкласс
def parse_settings(self, data: dict) -> FansSettings:
   ....


что я ломаю с точки зрения здравого смысла?
языку (Python) исключительно пофиг на эту ситуацию
но я, вероятно, делаю что-то не то
Не вижу проблемы этого кода
источник

D

Dr Zlo in pro.cxx
Danya
Можно сделать например так:
template<std::size_t w, std::size_t h>
class AbstractDisplay {
 static constexpr auto width = w;
 static constexpr auto height = h;
 ...
};

class Display : public AbstractDisplay<240, 240> {};

template <typename D>
class Graphic {     static_assert(std::is_base_of<AbstractDisplay, D>::value);
 std::array<uint8_t, D::width * D::height>;
};
А принимать AbstractDisplay в кач-ве аргумента как?
источник

D

Danya in pro.cxx
Dr Zlo
А принимать AbstractDisplay в кач-ве аргумента как?
Через шаблон
источник

D

Danya in pro.cxx
Также как в Graphics
источник

D

Danya in pro.cxx
Эх как концептов не хватает мне...
источник