シングルトンの実装方法は、大きく分けて2通り存在します。 ローカル静的オブジェクトによる実装 動的割り当てによる実装 ローカル静的オブジェクトによる実装 class Foo { private: Foo() = default; ~Foo() = default; public: Foo(const Foo&) = delete; Foo& operator=(const Foo&) = delete; Foo(Foo&&) = delete; Foo& operator=(Foo&&) = delete; static Foo& get_instance() { static Foo instance; return instance; } }; Wikipediaで紹介されている実装例と同じです。 ローカル静的オブジェクトによって、初めて Foo::get_instance() が呼び
#include <torch/torch.h> #include <iostream> class Net : torch::nn::Module { public: torch::nn::Conv2d conv1=nullptr; //謎の構文 torch::nn::MaxPool2d* pool; //ポインタで定義 Net(); ~Net(); }; Net::Net() { torch::nn::Module(); conv1 = torch::nn::Conv2d(1, 6, 5); //変数代入で初期化 pool = new torch::nn::MaxPool2d(torch::nn::MaxPool2dOptions({2, 2})); //newでメモリ確保 } Net::~Net() { //delete conv1; //変数なのでdelete命令を掛けるとエラー
C++20で導入されたstd::jthreadは、スレッドを中断させる仕組みをもった便利なクラスです。今回は、C++14でそれを簡易的に実装してみました (C++14の機能としてはラムダ式の初期化キャプチャを使っています。ラムダ式に外の変数をムーブするために必要)。 std::thread + std::promiseとstd::futureを使えばできます。 std::promiseに値を設定することで中断リクエストし、スレッド側のstd::futureはstd::promiseに値が設定されるまで (中断リクエストされるまで) 処理を続けます。 std::promiseには1回しか値を設定できないので (2回設定すると例外が投げられる)、2回以上設定されないようにする必要があります。 #include <thread> #include <future> #include <utili
EigenはC++で書かれた線形代数ライブラリである。特徴の一つとして、式の実装にtemplate機能を活用している点があり、これにより 遅延評価 (lazy evaluation) を実現している。遅延評価を適切に使うことで、計算コストを削減できることがある。 Eigen Eigenの遅延評価については公式ドキュメントの次のページが詳しいため、本記事では厳密性・網羅性よりも概要の理解しやすさを重視する。 Eigen: Lazy Evaluation and Aliasing なお、以下のコード例では using namespace Eigen; が暗黙的に実行されているとする。 Eigenにおける遅延評価 演算の返り値の型に注目する 行列を表す MatrixXd 型の変数 a があり、その転置を表現するために MatrixXd a = ...; ... = a.transpose();
前回の記事でPC-98エミュ+FreeDOSの環境でMS-DOSアプリが動くことを確認した. となると,あと思うことは1つ. MS-DOSのアプリケーションを自作したい! ということです. 今回はC言語でMS-DOSのアプリケーションを作ってみましょう. 環境 OS:Ubuntu 20.04 PC-98エミュ:xnp2kai rev.22 d3fe02a FreeDOS(98):20200709更新のHDI形式 Cコンパイラのinstall i8086版GCC フリーのCコンパイラと言えばGCC.便利ですよね. しかし,少し前までGCCは32bit || 64bitのアーキテクチャしかターゲットにしてきませんでした. なので16bitのPC-98x1向けのバイナリは生成できなかったわけなんですよね. それが最近,ついに16ビット版GCCが登場しました.しかもDOS環境特化. 詳しい話は以下
2018年11月08日 GCC5以降のlibstdc++のデフォルトABI変更について GCC 5 以降の C++ ライブラリ、libstdc++ はデフォルトの ABI が変更されているため、それ以前の g++ でコンパイルしたバイナリとは(デフォルトでは)リンク互換性がありません。ただし、旧 ABI もサポートしているので、Dual ABI サポートのライブラリとなっています。 これについてまとまった日本語情報が見当たらなかったのでまとめてみます。 確認環境には、GCC 7 と GCC 4.8 が簡単に共存できるので、Ubutun 18.04 を使用します。apt-get で g++ と g++-4.8 をインストールしてあるものとします。 $ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.1 LTS (Bionic Beaver)"
理想 ビルド不要でヘッダ1つ 標準ライブラリのみに依存していてポータブル ヘルプを自動生成してくれる オプション定義時に格納先の変数を紐付けできる (argc, argv) だけでなく std::string とかからも読み込める 読み込める形式で全ての値を書き出せる マクロではなくtemplateやlambdaなど真っ当なC++ (できればC++11以降の簡潔なスタイル) で書ける GNU getopt https://www.gnu.org/s/libc/manual/html_node/Getopt.html UNIX的な環境ならインストール不要だがC/C++標準ではない ヘルプなど自動生成してくれない C++というよりCなので手作業が多い boost::program_options https://www.boost.org/doc/html/program_options.ht
ことのおこり cocos2d-xをやるにあたってc++を5年振りくらいに触ったらc++11ってのになっていて、 色々知らない言葉が出てきてナニコレうわーんってなったので なにこれワードと参考にしたリンクとざっくりしたメモを並べておく。 メモね。動作確認とかしてないです。 結局書きかけ。。。 間違ってたら教えて下さい。 なにこれ… rvalue reference std::move std::forward NRVO/RVO emplace (mapとかvectorとか) std::piecewise_construct std::forward_as_tuple lambda 意外と少ないかも 参照関連 rvalue reference とりあえず、lvalueとrvalueというものがあって、rvalueは一時的なオブジェクトのこと。 以前から & を使うことで参照を作ることはできたけ
What's all the C Plus Fuss? Bjarne Stroustrup warns of dangerous future plans for his C++ Interview Earlier this year, Bjarne Stroustrup, creator of C++, managing director in the technology division of Morgan Stanley, and a visiting professor of computer science at Columbia University in the US, wrote a letter inviting those overseeing the evolution of the programming language to “Remember the Vas
Account Suspended This Account Has Been Suspended
先日、GoogleはAbseilというライブラリを公開した。 abseil/abseil-cpp: Abseil Common Libraries (C++) その中身を見てみたが、どうもその価値がよくわからない。 その大半は、C++14/17風の標準ライブラリのC++11による実装だ。C++14はすでにGCCもClangも実装し終えており、C++17の完全な実装も時間の問題だ。このようなライブラリを使うことはむしろ最新のC++規格の普及を妨げる。 曰く、「Abseilは完全なC++14/17実装では標準ライブラリのtypedefになる」と。しかし、それで問題が解決するのであればさっさとC++コンパイラーのバージョンを挙げたほうがよい。 containerには変わり者がある。inlined_vector<T, N>はstd::stringのSSO(Small String Optimiza
Facebook Has Been Working On C++ Modules Support For GCC Written by Michael Larabel in Standards on 8 October 2017 at 08:29 AM EDT. 26 Comments For C++20 the long-awaited modules system is likely to finally land. Facebook engineers have been working on a C++ modules implementation already for the GNU Compiler Collection. Since LLVM Clang 5.0 has been an experimental C++ modules implementation ther
C++17の参考書はほぼ書き終えて、あとはfilesystemライブラリの解説を残すだけになっている。 EzoeRyou/cpp17book: textbook for C++17 ファイルシステムライブラリは、ext4とかbtrfsのようないわゆるファイルシステムに対するライブラリではなく、ディレクトリとファイルに対する操作を提供するライブラリだ。具体的にはファイルパスの文字列処理や、ファイルのコピーやリネーム、ディレクトリ構造のトラバースといった雑多なファイルシステム操作を提供する。 C++のファイルシステムライブラリは、原則としてPOSIX互換になっている。POSIXの規定するライブラリをモダンなC++風のライブラリとして設計したものだ。例えば、カレントディレクトリにあるファイルをすべて表示するプログラムは以下のように書ける。 #include <filesystem> #inclu
Addons アドオンは動的に共有オブジェクトをリンクします。 それらは、C や C++ のライブラリに接合点を提供します。 API はいくつかのライブラリの知識が必要で、(現時点では) かなり複雑です。 V8 JavaScript は C++ のライブラリです。 JavaScript のオブジェクト作成や関数呼び出し等のインタフェースに使用されます。 ドキュメントは主に、v8.h のヘッダファイル (Node のソースツリーの中の deps/v8/include/v8.h) に記されています。libev は C の event loop ライブラリです。 ファイル記述子が読み取り可能になるのを待つとき、タイマーを待つとき、シグナルを受信するのを待つときはいつでも、 libv のインタフェースが必要になります。 つまり、何らかの I/O 処理をすると必ず libev を使う必要があるという
Template Aliasは、テンプレートに対するtypedefだけかと思っていたら、どうも、alias declarationといって、typedefと同等の機能も提供しているようだ。知らなかった。 using type1 = int ; using type2 = int [10] ; using type3 = type1 (*) ( type2 ) ; その意味を説明するまでもないほど、とても分かりやすい。やはり、別名を最初に記述できるのが、分かりやすい理由だろう。この宣言を読めば、何の型かはともかくとして、とにかく、別名の名前は、簡単に分かる。しかる後に、右側を読めば、型が分かる。ちなみに、C++03では、以下のように書かなければならない。 typedef int type1 ; typedef int type2[10] ; typedef type1 ( * type3 )
1. tiny-dnn is a header-only deep learning framework for C++ that aims to be easy to introduce, have simple syntax, and support extensible backends. 2. It allows defining neural networks concisely using modern C++ features and supports common network types like MLPs and CNNs through simple syntax similar to Keras and TensorFlow. 3. The framework has optional performance-oriented backends like AVX
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く