플러그인 시스템을 Boost.DLL로 쉽게 구현하는 소개
이 기사의 예상 사용자
간단한 클래스 레벨 플러그인
간단 · w ·
준비하는 것
plugin_type.hxx:
#pragma once
#include <string>
namespace usagi::example::boost_dll
{
class plugin_type
{
public:
virtual auto get_name() const -> std::string;
virtual auto operator()( const int a, const int b ) const -> int;
virtual ~plugin_type() { }
};
}
plugin_a.cxx:
#include "plugin_type.hxx"
#include <boost/config.hpp>
namespace usagi::example::boost_dll
{
class plugin_a : public plugin_type
{
public:
auto get_name() const -> std::string override { return "adder"; }
auto operator()( const int a, const int b ) const -> int override { return a + b; };
};
extern "C" BOOST_SYMBOL_EXPORT plugin_a plugin;
plugin_a plugin;
}
app.cxx:
#include "plugin_type.hxx"
#include <boost/dll/import.hpp>
#include <iostream>
auto main() -> int
{
using namespace std;
using namespace usagi::example::boost_dll;
// ↓ op は boost::shared_ptr< plugin_type > 型で与えられる。
// (std::shared_ptr へ変換したい場合は参考†を参照。)
auto op =
boost::dll::import< plugin_type >
// ↓ロードするプラグインのパス(実用の際は一般に決め打ちにしない事が多い)
( boost::filesystem::path( "plugin_a" )
// ↓インポートする対象のプラグインでエクスポートされているシンボル
, "plugin"
// ↓これを付けておくと、 .so や .dll をパスに勝手に追加してくれて便利
, boost::dll::load_mode::append_decorations
);
cout << op->get_name() << " " << (*op)( 1, 2 ) << endl;
}
응용 프로그램: poker의 플레이어 AI를 플러그인화하고 놀 수 있도록 해 주는 예
↑라고 말하는 기사만 써도 별로 재미가 없기 때문에, ↓ 이런 것을 새해 전날 해커슨 2016 로 만들어 보았습니다. (할 수 있어, 이 기사를 쓰고 있는 현재, 이미 1월 4일이지만 네오(´ー`)노)
GitHub - usagi/poker : 작가가 자신의 워크숍이나 공부회용으로서 개발하는 플러그 가능한 포커 시스템입니다.
↑이런 느낌으로 플레이어 AI의 플러그인을 조금 쓰면 ↓ 이런 상태로 즐길 수 있습니다.
선전 : 「완쿠마 삿포로」 시작합니다 ヽ(´ー`)노
2017년부터 완쿠마 동맹의 삿포로 지부로서, 완쿠마 공부회・삿포로를 연 2회의 페이스로 개최 할 수 있는 일이 되었습니다! 2017년은 3월 4일에 완쿠마 삿포로 #1, 8월 5일에 완쿠마 삿포로 #2를 개최합니다. 30분, 60분의 세션 프레임, LT 프레임, 간식 등 등 준비해 여러분의 참가&등단의 신청을 진심으로 기다리고 있습니다. 🍻🍶🍣
나의 테두리가 발생한 완쿠마 삿포로회에서는, 이번 기사에서 소개한 poker 시스템을 베이스로 한 알고리즘 뇌즙 체조계의 워크숍을 실시할까라고 생각하고 있습니다. 그 때는 C++의 네이티브 구현 외에도 뭔가 조금 더 간편한 스크립트 언어의 바인딩 등에도 대응하고, C++ 입문이 아니라 알고리즘 뇌즙 체조로서 많은 참가자에게 즐길 수 있는 내용이 된다고 생각하고 있습니다 합니다. 그릇이나 어둠이 어떻게 됐는지 신경쓰지 않고, 꼭 「완쿠마 삿포로」에 놀러 오세요!
덧붙여서, 올해부터 잠시에는, 이 poker 를 기능 확장하거나, 리팩토링 하거나, 그러한 때마다 C++ 의 구현 예 등 기술적인 부분의 입문자용의 기사 부분은 Qiita 에 투고할 생각이므로, 이쪽 계속해서 잘 부탁드립니다.
참고
Chapter 10. Boost.DLL
Reference
이 문제에 관하여(플러그인 시스템을 Boost.DLL로 쉽게 구현하는 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/usagi/items/0722550dc5433bd07139텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)