タグ

関連タグで絞り込む (152)

タグの絞り込みを解除

C++に関するdelegateのブックマーク (152)

  • sqlite3でDBを操作してみる(C++編) - Elsaの技術日記(徒然なるままに)

    以前sqlについて簡単にまとめました。 今までnodejsやpythongo言語などでsqlを用いてDBの操作したことがあったのですが、 CやC++sqlを利用したことがなかったので今回使ってみました!! elsammit-beginnerblg.hatenablog.com ちょっとばかしクセのある使い方だったので備忘録として残しておこうと思います。 ■環境構築 ■sqlite3操作(データベースを開く) ■sqlite3操作(テーブルを作成する) ■sqlite3操作(データを挿入) ■sqlite3操作(テーブル有無チェック) ■最後に ■参考 ■環境構築 今回用いる環境ですが"Ubuntu 20.04"を用いました。 C言語やC++sqlite3 を用いる場合には、 sqlite3.hが必要になるのですが、標準ではこららのライブラリが未インストールになります。 そこでこちらの

    sqlite3でDBを操作してみる(C++編) - Elsaの技術日記(徒然なるままに)
  • デバッグ出力ストリーム - Qiita

    Windows には OutputDebugString という API が用意されています。 これはデバッガへ文字列を通知するものです。 WindowsGUI アプリケーションはコンソールに接続されていないのでいわゆるプリントデバッグがやりづらいのですが、この API を介して状況を把握できます。 デバッガがアタッチされていないときのメッセージは単に捨てられるので、リリース版のソフトにそのまま残しておいてもそれほど害にはなりません。 ごく僅(わず)かに余計な処理をすることになるだけです。 さて、この API は便利なのですが、 C++ を使っているときには不満な部分もあります。 C++ のオブジェクトを表示する方法はしばしばストリームに対するものしか定義しないことがあり、それを API に渡せる文字配列にするには一度 stringstream に出力するなどといった迂遠な方法を取る

    デバッグ出力ストリーム - Qiita
  • 今どきのプログラミング言語では当たり前! Modern C++で使えるモダンな言語仕様

    はじめに C言語から派生したオブジェクト指向プログラミング言語であるC++は、21世紀に入ってまったく別物とも言えるプログラミング言語に成長していきました。それは、Modern C++と称されています。1990年代にC++を触っていたプログラマが現在の仕様を知れば、隔世感に苛まれるのではないでしょうか。連載では、かつてはC++をたしなんでいたという方、今からC++言語を始めるという方に向けて、Modern C++らしい言語仕様をピックアップし紹介していくことで、今のC++言語の姿を理解していただきます。 対象読者 かつてはC++をたしなんでいたという方 今からC++言語を始めるという方 モダンなプログラミング言語のパラダイムに興味のある方 必要な環境 記事のサンプルコードは、以下の環境で動作を確認しています。 macOS Sonoma/Windows 11 Xcode Command

    今どきのプログラミング言語では当たり前! Modern C++で使えるモダンな言語仕様
  • C++erは全員戻り値型の後置記法を使おう - ペイントソフト開発日誌

    目次 目次 「戻り値型の後置記法」って何? 何が嬉しいの? 問題点 「戻り値型の後置記法」って何? C++11から導入された言語仕様です。 タイトルの呼び方は自分が勝手に使っているだけで、英語圏だと「trailing-return-type」がよく使われるらしい。 cpprefjp.github.io この仕様を使うと例えば以下のようなコードが int Add(int a, int b) { return a + b; } このようになります。 auto Add(int a, int b) -> int { return a + b; } 何が嬉しいの? この仕様はC++のメタプログラミングで戻り値型の推論を簡単に行う目的で使用されます。 なんだ、そんなC++上級者のための機能なんて下々の人間には関係ないじゃん、とお思いかもしれませんが、この機能にはもう一つわかりやすい大きなメリットがある

    C++erは全員戻り値型の後置記法を使おう - ペイントソフト開発日誌
  • 【C++】string型をcharに変換/コピーする方法【値 配列 ポインタ string to char】

    C++の文字列クラスをchar型やchar配列、C言語形式の文字列へ変換またはコピーする方法を紹介します。 目次 std::string → const char*(C言語形式の文字列へ変換) std::string → char*(ヌル終端文字列のコピー) std::string → char[](固定長配列へのコピー) std::string → char[] (部分文字列をコピーする場合) std::string → char(文字型への変換) std::u16string → char16_t(ワイド文字列のコピー) std::string → const char* std::string型のメンバ関数c_strで、C言語スタイルの文字列をポインタとして取得することができます。 std::string str("abc"); const char* cstr = str.c_st

  • C++では定数はヘッダではなくソースファイルに書こう - 結果だけでなく過程も見てください

    特定の意味をもつリターンコード等の固定値は ある程度1つのヘッダに集中して定義すると思います。 例えば、C言語ではマクロ変数を使用して以下のように定義します。 人によってはC++でも以下のように定義するかもしれません。 #define RETCODE_SUCCESS (0) #define RETCODE_FAIL (1) #define RETCODE_WARN (2) マクロ変数は、コンパイラではなくプリプロセッサで置き換えられるので コンパイラはRETCODE_SUCCESSやRETCODE_FAILなどのシンボルを 認識することができません。 これはプログラム上の各所にマジックナンバーが散りばめられる ことになり、デバッグ時などには都合がよろしくないということで、 C++では以下のように定義することを推奨しています。 このへんはEffective C++の2項あたりにも書いてたと思

    C++では定数はヘッダではなくソースファイルに書こう - 結果だけでなく過程も見てください
  • [C++]std::mapに[]でアクセスする場合の作用について

    #include <stdio.h> #include <map> #include <chrono> using namespace std; int getGood(map<int,int> &m, int key, int default_value) { auto found = m.find(key); if(found == end(m)) { return default_value; } return found->second; } int getBad(map<int,int> &m, int key, int default_value) { if(m.find(key) == end(m)) { return default_value; } return m[key]; } int insertGood(map<int,int> &m, int key, int

    [C++]std::mapに[]でアクセスする場合の作用について
    delegate
    delegate 2024/04/09
    [std::map][あとで読む]
  • 【VBA機能拡張】C++でDLLを自作してExcelVBAで呼び出す方法 | LiCLOG

    このページはVBAでアプリケーション拡張ファイルである「DLL」を自作して、呼び出すまでの流れを解説していきます。DLLファイルはC++言語で作成することができるため、VBAだけでは実現できないような処理をC++の機能で増幅させることができます。 ここではVBAの機能拡張という名目で進めていくので、VBAはある程度理解しているという前提で解説していきます。基的にC++は知らなくても大丈夫な内容にはなっていますが、最終的に自作DLLを作る際には必須となるのであらかじめ注意しておいて下さい。 DLLファイルとは DLL(Dynamic Linking Library)とは拡張子が「.dll」のアプリケーション拡張ファイルです。 このDLLファイルの中身には様々な種類の関数がいくつもつまっています。VBAであろうとその他の言語であろうと基的にはこのDLLファイルにアクセスして、指定した関数を

    【VBA機能拡張】C++でDLLを自作してExcelVBAで呼び出す方法 | LiCLOG
  • C++11のすすめ

    この記事は Competitive Programming Advent Calendar Div2013 の 12 月 23 日の記事として書かれました. C++11 のすすめ C++03 は普段から使っているけども C++11 はまだ触ったことがない人向けの入門記事です.最近は多くのプログラミングコンテストで C++11 が使えるようになりつつあります.C++11 で大幅に C++ が書きやすくなっているので,ぜひこの記事を読んで C++11 を使い始めてください!この記事では C++11 に追加された多数の新機能のうちコンテストに役立ちそう(もしくは多くの人が使いそうな)機能を紹介します. 手元での実行の仕方 GCC もしくは clang を利用していれば -std=c++0x というオプションを追加すれば C++11 の機能が有効になります. $ g++ -std=c++0x -o

  • [海外動画紹介] あなたが止めるべき31の初心者っぽいC++の習慣 - Qiita

    31 nooby C++ habits you need to ditch - YouTube この動画の解説が非常に参考になったので、勉強がてら紹介記事を書くことにしました。 完全翻訳ではなく、大雑把に要点のみ解説しています。気になる方は元動画をご参照ください。 登場するソースコードは下記のURLで入手可能です(解説コメント付き)。 翻訳内容に若干自信がない部分があるので、おかしな点があればご指摘いただけると助かります。 1. using namespace std; 1 #include ... using namespace std; void using_namespace_std() { string s{"hello, world!"}; cout << s << endl; } 関数などのスコープ内に収まっている場合は問題ないが、グローバル空間やヘッダーにusing宣言が定義

    [海外動画紹介] あなたが止めるべき31の初心者っぽいC++の習慣 - Qiita
  • C++においてメンバ関数を関数オブジェクトとして渡す方法 - std::bindとラムダ式 - Qiita

    概要 この記事では、C++のメンバ関数を関数オブジェクトとして渡す方法を紹介します。具体的には、std::bindを用いた方法とラムダ式を用いた方法を、それぞれソースコードを交えて説明します。 はじめに 初心者がC++プログラムを作成する際、自作クラスのメンバ関数をあるライブラリのクラスやAPIに渡すことが求められる場面があります。しかし、メンバ関数は直接渡すことができず、この点はC++の扱いにくさの一つとなっています。これは、メンバ関数がクラスのインスタンスに関連付けられているため、引数としてそのまま渡すことができないためです。 幸い、C++では「std::bind」と「ラムダ式」という機能を使ってこの問題を回避できます。これらの機能を利用することで、メンバ関数を適切に渡すことができ、C++の扱いにくさを少しでも軽減することができます。 具体的な実装方法 std::bindを利用する方法

    C++においてメンバ関数を関数オブジェクトとして渡す方法 - std::bindとラムダ式 - Qiita
  • 文字列取得バッファとしてのstd::string - yohhoyの日記

    C++標準ライブラリの文字列型 std::string*1 を、C言語インタフェースへの文字列取得バッファとして使う方法についてメモ。記事の内容はStack Overflowで見つけた質問と回答に基づく。 2016-03-27追記:C++17(C++1z)対応版はこちら→文字列取得バッファとしてのstd::string リターンズ - yohhoyの日記 2013-08-30追記:C++03以前でも事実上「std::string 内の文字列バッファは連続したメモリ領域」といえる?C++ Standard Library Defect Report List #530 Must elements of a string be contiguous?、Cringe not: Vectors are guaranteed to be contiguousコメントも参照のこと。 まとめ: C++

    文字列取得バッファとしてのstd::string - yohhoyの日記
    delegate
    delegate 2024/01/10
    [std::string][あとで読む]
  • 特殊なイテレータを使おう - Qiita

    はじめに みなさんこんにちは。 通常イテレータといえば、まず思いつくのはコンテナの要素を順々にたぐるアレだと思いますが、STLにはそうでないイテレータもあります。それはイテレータによってアルゴリズムを汎用的に書けるようになったことで可能になった応用的なイテレータですが、非常に有用な反面とっつきにくいイメージがあります。そこで、この記事ではSTLに存在する特殊なイテレータをSTLに存在する通常のアルゴリズムを使って紹介していきたいと思います。 reference: http://en.cppreference.com/w/cpp/iterator http://en.cppreference.com/w/cpp/algorithm 通常のイテレータ イテレータがゲシュタルト崩壊したときに見てください。 std::vector< int > vec { 1, 2, 3, 4, 5 }; typ

    特殊なイテレータを使おう - Qiita
  • [C++] C++でサービスをつくる(正式版) - Qiita

    もくじ サービス関連記事 やりたいこと 以前の記事で、Microsoftのサンプルページをもとに、C++Windowsサービスを作った。(MSページは下記参照) C++でのサービスに関するMSページ https://docs.microsoft.com/en-us/windows/win32/services/services C++でのサービスのサンプルプログラム https://docs.microsoft.com/en-us/windows/win32/services/svc-cpp そこでは、ほぼMSのサンプルのコードのまま、ビルドがうまく通らなかった部分だけ直してサンプルコードとして載せていたが、簡単なサービスのサンプルとして勉強をする上では不要な部分がかなりあってわかりづらかったので、自分がいると思った部分だけ残して間引いた。 その時実験で作成したコードと、学んだサービスの

    [C++] C++でサービスをつくる(正式版) - Qiita
  • 2023年に特にお世話になったC++ライブラリ8選 - Qiita

    たぶん2023年一番お世話になったライブラリです。 2022年まではsimdjsonをよく使っていたのですが、新規プロジェクトはGlazeばかり使っています。 開発が活発だし、ISSUEへの対応が速いのもありがたいです。 良い点 SIMDを利用していないのにsimdjsonやyyjsonと遜色ない速度で動作する 構造体やクラスだけでなくSTLコンテナもJSONとの直接読み書きができる 中間データに独自バイナリ形式を利用してさらに高速化できる いまいちな点 長い文字列が多いJSONデータの読み込みではSIMDを使っているライブラリに対して不利になる 最後のフィールドのカンマやコメントの読み込みに対応していない ストリーム的な処理はない(と思う) 代替ライブラリ 似たようなアプローチでSIMDを使ってさらに速いJsonifierというライブラリがあります。 純粋な速度を求める場合にはこちらを使

    2023年に特にお世話になったC++ライブラリ8選 - Qiita
  • std::forward restriction - 野良C++erの雑記帳

    いつの間にか GCC のオプションで -std=c++11 という書き方が可能になっていたので, これからの C++11 関連の記事には C++0x ではなく C++11 というタグを付けることにします. *1 最近は GCC のみならず, Clang でも格的に C++11 の機能が実装されるようになったし, GCC は GCC で, Template aliases とか Non-static data member initializers とか Delegating constructors といった, 極めて分かりやすく恩恵も多い C++11 の機能が実装されてきているので, そろそろ僕も最近 C++11 の記事をかけなかった分を取り戻そうかなぁとか. 閑話休題(それはさておき), C++11 では std::forward という関数を使うことで Perfect Forwar

    std::forward restriction - 野良C++erの雑記帳
  • 【C++】デストラクタが呼ばれる/呼ばれない - Bite Code

    すごく久しぶりの記事更新になってしまいました。 デストラクタ備忘録です。 派生されるクラスのデストラクタは仮想関数にしなければならない 純粋仮想デストラクタには定義が必要 placement new により構築されたオブジェクトは明示的にデストラクタを呼び出す必要がある std::shared_ptr<T> は、リソースを解体する時に、初期化時の実引数の型のデストラクタが呼ばれる std::unique_ptr<T> の場合は、shared_ptr とは異なり T 型のデストラクタが呼ばれる デストラクタを仮想にする まずは超基的なことから。 多態するクラス階層では、デストラクタは仮想関数である必要があります。 class Base { public: // ・・・ virtual ~Base(); // 仮想デストラクタ }; class Derived : public Base {

    【C++】デストラクタが呼ばれる/呼ばれない - Bite Code
  • Crypto++ Library 5.4 - a Free C++ Class Library of Cryptographic Schemes

    Other features include: pseudo random number generators (PRNG): ANSI X9.17 appendix C, RandomPool, VIA Padlock, DARN, RDRAND, RDSEED, NIST Hash and HMAC DRBGs password based key derivation functions: PBKDF1 and PBKDF2 from PKCS #5, PBKDF from PKCS #12 appendix B, HKDF from RFC 5869, Scrypt from RFC 7914 Shamir's secret sharing scheme and Rabin's information dispersal algorithm (IDA) fast multi-pre

  • [C++] スレッドからのコールバック│miscellaneous

    自分が生成したスレッドからのコールバックを受け取る方法 Listener方式 コールバック関数が定義されているListenerクラスを作成し、コールバックを受け取る側のクラスでListenerを継承する。 #include <iostream> #include <functional> #include <boost/function.hpp> #include <boost/thread.hpp> class Listener{ public: virtual void callback()=0; }; class Child{ // (Listenerについて知っていれば)Parentのことは直接知らなくても良い public: void set_listener(Listener* p){ listener_ = p; } void bar(){ std::cout << "Chi

    [C++] スレッドからのコールバック│miscellaneous
  • メンバ関数の関数ポインタを扱う方法 | まくまくC/C++ノート

    グローバル関数を関数ポインタ経由で呼び出す場合は、関数がメモリ上のどの位置に存在するかが分かればよいので、関数ポインタさえ保持していれば呼び出し可能です。 これに比べ、メンバ変数の呼び出しの場合は、メモリ上のどこにオブジェクトが存在するかの情報も必要になるので、 オブジェクトのアドレス(を格納したポインタ変数) メンバ関数のアドレス(を格納したポインタ変数) の両方の情報が必要になります。 下記のサンプルでは、Sender クラスが Receiver クラスのインスタンスと、メンバ関数ポインタを保持し、Receiver クラスのメソッドを呼び出しています。 #include <iostream> class Receiver { public: void Function1() { std::cout << "1" << std::endl; } void Function2() { st

    メンバ関数の関数ポインタを扱う方法 | まくまくC/C++ノート