-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
C++11を使用したsingletonの作成方法 #606
Comments
とりあえず、戻り値はポインタのままとして、以下のように変更してみた。 static factory* instance() {
static factory instance;
return &instance;
} 以下が不要となる。 static inline factory* instance_; そのため、pyrokko.cppの以下の宣言が意味をなさなくなる。 #define PYROKKO_DEFINE_FACTORY(T) \
template<> \
T* T::instance_;
PYROKKO_DEFINE_FACTORY(rokko::detail::sd_solver_factory)
PYROKKO_DEFINE_FACTORY(rokko::detail::pd_solver_factory)
PYROKKO_DEFINE_FACTORY(rokko::detail::ps_solver_factory)
PYROKKO_DEFINE_FACTORY(rokko::detail::ps_mapping_1d_factory)
PYROKKO_DEFINE_FACTORY(rokko::detail::ps_mapping_1d_factory_num)
PYROKKO_DEFINE_FACTORY(rokko::detail::ps_crs_factory) miniij.cppの実行は正常終了。 |
staticなクラス変数
template<>
rokko::detail::sd_solver_factory& rokko::detail::sd_solver_factory::instance();
PYBIND11_MODULE(pyrokko, m) { コンパイルエラー:
|
factory.hppを、static local variableをstd::unique_ptrで定義するのが、一番筋が良い。 static inline factory& instance() {
static const std::unique_ptr<factory> instance_(std::make_unique<factory>());
return *instance_.get();
} 関数のinline宣言は不要かも。 minij.pyの実行で、#391 と同様に、ソルバが見つからないというエラーが発生する。 |
#define ROKKO_DECLARE_FACTORY_INSTANCE(T) \
template<> \
int T::largest_priority_; Mac+clangで、minij.pyを実行すると、固有値ソルバが一つも登録されていなかった。 |
C++11のMagic Staticsを用いたsingletonの作成方法を検討。
ポインタを使わなくて済む。
スレッドセーフな方法。
https://stackoverflow.com/questions/137975/what-are-drawbacks-or-disadvantages-of-singleton-pattern
https://stackoverflow.com/questions/44525097/what-is-the-right-way-of-setting-member-pointers-to-null-in-a-singleton-class
https://codereview.stackexchange.com/questions/173929/modern-c-singleton-template
The text was updated successfully, but these errors were encountered: