はじめに 2019/7/10追記 NAMEOF_TYPEの例が0.8.0以降のバージョンで動かない問題を修正しました (Thanks! @tyu_ru_cppさん) C++だと「enumで定義した名前を文字列にしたい」というときに困ることがたまによくあります。他の言語だとToStringメソッドを使って文字列にできたりするのですが、C++だとそうはいきません。 Qtを使うと独自の黒魔術によって比較的楽に取得することができるのですけども、Qtを使わないピュアなC++な環境だとどーすんだろっていう感じです。 そこで、Siv3dの作者さんである@Reputelessさんが、まさにそのenumから文字列の変換ができるライブラリについて呟いておられまして、その機能と実装方法に感銘を受けたので、ここで紹介したいと思います。 C++ で enum の値を追加の記述無しで文字列にできるライブラリだ (MS
数年前,まだ私が C++ でゲームを書いていたころ,深すぎる関数のネストは「一旦変数に入れ」て「読みやすくする」というコーディングスタイルにだいたい落ち着いていた.もちろん,「これは一旦別名を付けるだけで,変数に再代入する気はないよ」ということで const も付ける.ただあまり大きなデータのコピーは嫌だよねということで,戻り値が std::string や構造体の関数呼び出しを「一旦変数に入れる」ときは const 参照を好んで使っていた. A(B(C(a), b, D(E(c), d, e))); 「む,なんて読みにくいコード.ばらせよ」 const int target_id = C(a); const MessageBody& message_body = D(E(c), d, e); const Message& msg = B(target_id, b, message_bod
初歩的なとこで突っかかったのでメモ程度に。 本記事ではVisual StudioのプラグインであるVisual C++ for Linux Developmentに最近追加された機能を紹介します。 まずVisual C++ for Linux Developmentとは何かという話ですが、これは名前の通りVisual StudioでLinux向け開発をサポートするプラグインです。 プラグイン自体は以前から公開されていて、クロスコンパイルに関する方法の解説記事が上がっていたりします。 Visual C++ for linux Development を軽く使ってみた Visual C++ for Linux Developmentつかってみようとしたらハマったけど動いた さて。ここからが本題ですが、2016年8月19日に同プラグインではMakefileプロジェクトが新たにサポートされました。
Content outdated For up-to-date documentation see Linux development with C++. For an overview of the Visual Studio capabilities described in this article, see Develop C and C++ applications. This post was updated on December 11, 2020 Visual Studio 2017 introduced the Linux Development with C++ workload. We generally recommend Visual Studio’s native support for CMake for all C++ Linux development.
Visual Studio 2017でLinux C++のクロスプラットフォーム開発ができるようになったということで試してみます。 基本的にはこちらの内容と一緒です。 http://qiita.com/tadnakam/items/4660d8fa5b1b72f9eb70 Windows 7 Professional SP1 64bit Visual Studio 2017 Community VirtualBox v5.1.8 Vagrant v1.8.6 ゲストOS CentOS7.2 (bento/centos-7.2) ※VagrantでゲストOS(CentOS)はセットアップ済みとします。 Visual StudioでLinux C++開発できるようにする Visual Studio 2017のインストーラーからC++によるLinux開発をインストールします。 ゲストOS(Cen
この記事の内容 オブジェクト指向と10年戦ってわかったこと Twitterやはてブコメントを見たら、「わかりやすかった」というコメントもあったのですが、どちらかというとネガティブ方面なコメントが多く目につきました。マサカリという用語で忌憚なく意見を言う風潮については別にいいんですが、「わかりにくい」「間違っている」「古い」みたいなコメントは何も生み出さないし、みんなでニコニコポエムを投稿しあうやさしいインターネッツになったらいいなって思ったので、僕もオブジェクト指向について投稿しようと思います。 何原則? 3原則じゃなくて4では?みたいなコメントもあったのですが、別に3でも4でも5でも重要ではないかなって思います。この4原則の出どころがどこかは知らないですが、C++かSmalltalkあたり(このあたりの話を見かけたのはJava登場前だった気がする)をターゲットとしている気がします。Jav
以前の記事にもLinuxでのメモリーリークの検出に関する事を書いたのですが、もう少し一般的なやり方を紹介しましょう(というより、自分で毎回忘れるので備忘録として・・・)。 【mtraceを使う方法】 まず、mtraceを使う方法です。リークのテストを開始したい場所でmtrace()をコールし、終了したい場所でmuntrace()をコールするようにします。 #include <stdio.h> #include <stdlib.h> char *test() { char *test=malloc(10); return(test); } int main() { char *ptr; mtrace(); ptr=test(); //*(ptr+10)='\0'; //free(ptr); muntrace(); return(0); } -gつきでコ
オブジェクトの変更拒否 あらかじめ、オブジェクトがもつメンバ変数の値を変更する予定のない データの読み込み専用の関数などは、メンバ変数を変更できないようにすると 思わぬ変更によるデータの整合性の損傷を避けることができます メンバ関数の宣言に const キーワードを指定すると そのメンバ関数はオブジェクトの持つメンバ変数を変更できなくなります member-function() const {... メンバ関数名の後に const を指定するところに注意してください #include<iostream> using std::cout; class Kitty { public: char *str; void print() const { //str = "Chobits"; cout << str; } Kitty(char *str) { this->str = str; } };
ここでは、入出力ストリームと共に使用するマニピュレータの作り方について解説します。マニピュレータは、関数でも、クラスでも実現できる少し毛色の変わったおもしろい存在です。マニピュレータを理解するにはオペレータのオーバーロードの知識が必須ですので、そちらもご覧ください。 マニピュレータとは 引数のないマニピュレータの作り方 引数のあるマニピュレータの作り方 グローバル関数として作成する方法 グローバルな関数オブジェクトとして作成する方法 クラスオブジェクトとして作成する方法 マニピュレータの応用例、printf 風マニピュレータ マニピュレータとは ページの先頭へ マニピュレータとは、cin、cout などを代表とする入出力ストリームに対する、挿入演算子 << や抽出演算子 >> と協調して、入出力フォーマットの変更を行うなどの目的で設計されたもので、標準ライブラリでは endl、setw、s
C++ の小技の紹介です。 C++ の標準ライブラリでは cout などにシフト演算子(<<)を使って出力します。 std::cout << "Hello World!!" << std::endl; これは iostream の上位クラスである ostream のシフト演算子(<<)のオーバーロードで実現されているのですが、これを自分で定義したクラス、構造体、列挙型などに対しても定義しておくと便利です。 これを定義しておくだけで、標準出力(cout), ファイル(ofstream), 文字列(stringstream)などにも自分で作ったクラス等を文字列として出力することが出来ます。 どうやるかというと、例えば点の構造体 Point があったとすると以下のように ostream クラスとシフト演算子(<<)の 2 項演算をオーバーロードします。 std::ostream &operato
frsw3nr.mydns.jp is not accessible... Sorry. I do not know why this site is not working. If you know Administrator of this site, please contact directly. You may be able to see it in Google cache. For administrator ... MyDNS.JP did not received IP address from you over One week. Please check your notify system. If you restart notification of IP address, MyDNS.JP will apply your IP address to DNS i
先日、政府は自衛隊の次期主力戦闘機(FX)に、米国など9カ国が共同開発中の米Lockheed Martin社製「F-35 Lightning II」を選定しました。 航空機産業は技術面で多大な波及効果があることから、FXの選定においても国内の防衛産業の基盤維持が一つの論点となっていました。ただし、今回選定が決まったF-35の場合、Eurofighter社の「Typhoon」といった他のFX候補機と比べると、国内で認められるライセンス生産の割合は低いようで、F-35調達における一つの懸念点となっているようです。 これはこれで日本の製造業にとって非常に重要な問題なのですが、それとは別に筆者がF-35で思い浮かべたのが、「JSF++」です。 JSFというのは、F-35のプロジェクト発足当初の名称で「Joint Strike Fighter」の略称です。さまざまな国の多様な目的を持った戦闘機を共通
このサンプルでは計算を行っているが,GSNの場合,この計算ルーチンが実際のアンテナ制御ルーチンに入れ替わる事になる. *注意! ここで示す例は構築方法の一例であるため,最適な方法とは限らない * 1.開発用のベースフォルダ"calc"を作る. (フォルダ名は任意であるが,本稿では以下"calc"として扱う) 2.ベースフォルダ"calc"内に,加算,積算,2乗計算に関する,メソッド名,パラメータ名,パラメータデータ型を"calc.h"ファイルに記述する. また,calc.hの最初の部分には,C++言語におけるデータ型を,SOAPペイロード内で用いている XML Schemaのdatatypeにtypedefしている. ここで,int ns__add(xsd__double a, xsd__double b, xsd__double &result);の行を解説する. まず,関数の戻り値はi
Qt - A cross-platform application and UI framework Nokiaは3日(ノルウェー時間)、Qtの最新版となるQt 4.5を公開した。QtはC++で開発されたクロスプラットフォームアプリケーションおよびUIフレームワーク。4.5はフレームワーク全体に渡ってパフォーマンスの改善(グラフィックシステム、データハンドリング、Webエンジンほか)が実施されたバージョン。それ以外の注目点は次のとおり。 軽量クロスプラットフォームIDE Qt Creatorの導入 新しいQt SDKの提供 WebKitレンダリングエンジン統合の改善 QtからFlashのハンドリングが可能になるようにNetscape Plugin APIサポートを追加 新しいJavaScriptエンジンの導入 Apple Cocoaフレームワークへの移植(Carbonにも対応) ライセンス
Joel Spolsky / 青木靖 訳 2005年5月11日 水曜 私が最初の本当の仕事をはじめたのは1983年9月に遡る。それはオラニムというイスラエルの大きな製パン工場で、16台の飛行機ほどもある巨大なオーブンで、毎晩10万個のパンが作られていた。 はじめて工場に入った時、そのあまりの汚さに信じられない思いだった。オーブンの側面は黄ばんでいるし、機械は錆びていて、そこらじゅうが油だらけだった。 「いつもこんなに汚いの?」と私は聞いてみた。 「なんだって? なんの話をしてるんだ?」とマネージャが答えた。「掃除したばかりだから、今が一番きれいな状態なんだ」 なんてこった。 毎朝の工場の清掃を何ヶ月か続けて、ようやく彼らの言っていたことが理解できるようになった。パン工場では、きれいというのは機械にパン生地が付いてないことを言うのだ。きれいというのは、ゴミ箱に発酵したパン生地が入ってないこと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く