Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/gob52/gob_adapter
Adapters for adding extended functions that combine public functions of existing classes (C++11 or later)
https://github.com/gob52/gob_adapter
cpp11 template
Last synced: about 2 months ago
JSON representation
Adapters for adding extended functions that combine public functions of existing classes (C++11 or later)
- Host: GitHub
- URL: https://github.com/gob52/gob_adapter
- Owner: GOB52
- License: mit
- Created: 2024-02-16T04:21:41.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2024-02-17T06:03:53.000Z (11 months ago)
- Last Synced: 2024-10-19T20:10:03.866Z (3 months ago)
- Topics: cpp11, template
- Language: C++
- Homepage:
- Size: 38.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.ja.md
- License: LICENSE
Awesome Lists containing this project
README
# gob_adapter
[English](README.md)
## 概要
既存クラスの公開関数を組み合わせた独自関数を、あたかも既存クラスのクラス関数のように使用する為のライブラリです。
C++11 以降の環境下で使用できます。
以下の特徴と制限があります。### 特徴
- 独自関数をカプセル化できる。
- 既存クラスのソースコードに影響は与えない
- "has-a" による実装なので既存クラスに副作用が起こらない (既存クラス継承による諸々の問題が発生しない)
- 矢印演算子とドット演算子が混在するので、一見分かりづらいかもしれません
(但し既存のクラス関数と独自関数のどちらを呼び出しているかは明確になります)
- 既存クラスの内部変更に対してこちらが受ける影響度が少ない### 制限
- 継承ではないので既存クラスの公開関数しか使用できない## 導入
環境によって適切な方法でインストールしてください
* git clone や Zip ダウンロードからの展開
* platformio.ini
```ini
lib_deps = https://github.com/GOB52/gob_adapter.git
```
## 使用方法```cpp
#include// Original class
class Original
{
public:
explicit Original(int v) : _v(v) {}
int value() const { return _v; }
private:
int _v{};
};// Extened class
// Add function to return squared value
class Extended : public goblib::plugin::Adapter
{
using goblib::plugin::Adapter::_cls;
public:
using goblib::plugin::Adapter::Adapter; // for constructorint square() const { return _cls->value() * _cls->value(); }
};Original org(52);
Extended extended(org);void foo()
{
printf("Value:%d\nSquare:%d\n",
extended->value(), // Call Original::value()
extended.square() // Call Extended::square()
);Extended* ep = &extended;
printf("Value:%d\nSquare:%d\n%d\n",
(*ep)->value(), // Call Original::value()
ep->square(), // Call Extended::square()
(*ep).square() // Call Extended::square()
);
}
```## 例
- [simple](examples/simple) シンプルな例
- [M5GFX](examples/M5GFX) LovyanGFX に自作描画関数を加える例