c++

Android で スタティックライブラリを利用する

Android の開発時に、C++などで作られた 静的ライブラリ〜.a や、共有ライブラリ〜.so を利用したい時。まず、ビルド設定方法は1つではない。CMakeLists.txt を使う方法、Android.mk を使う方法と、やり方が選べる。また、 so ファイルは、アプリケーション…

Unity から C++ 側でallocした配列にアクセスする

C++で new し、C#側で一旦コピー、さらにC++で削除 hoge.h #pragma once #define DLL_UNITY extern "C" __declspec(dllexport) typedef unsigned char byte ; DLL_UNITY void loadData (byte** data, int* dataSize); DLL_UNITY void freeData (byte** data)…

UnityのWindowsアプリでC++を使用する

C++でDLLを作成し、それをUnityでimportすることになる。 Unity側のDLLを使用するクラス Hoge.cs using UnityEngine; using System.Runtime.InteropServices; public class Hoge{ // .dll 拡張子は書かないでよい [DllImport("plugin")] public static exter…

seekg tellg が無効な値を返す

c++

ifstream is ("msg.bin", ios::in | ios::binary); if (is.fail()) assert (!"miss"); // ファイルサイズを調べる is.seekg (0, fstream::end); fstream::streampos end = is.tellg(); is.seekg (0, fstream::beg); ios::pos_type end = file->stream_->tell…

3項演算子を左辺値にする

c++

int main () { int a = 0; int b = 0; bool c = false; c ? a : b = 4; cout << "a=" << a << endl; cout << "b=" << b << endl; cout << "c=" << c << endl; }

メモリ上のストリームクラスを使用する

c++

ファイルに対して読み書きする場合は、fstream を使用しますが、 #include <fstream> int main (int argc, char** argv) { std::fstream fs ("test.txt", std::ios::in | std::ios::out); char bin[255] = {0}; fs.read (bin, 255); } メモリに対して読み書きしたい場</fstream>…

const

c++ c

変更できない定数 const int a = 0; 変更できない定数 int const a = 0; 値を変更できない const int* a = 0; a = NULL; 値を変更できない int const* a = 0; a = NULL; 好き放題 *1 *2 int* a = NULL; 参照先を変更できない。const は 常に左側に係る int *…

例外の基本クラス

c++

しょっちゅう自分で投げるクラスは赤くした。 発生タイミングについては、仕様的な記述を見たことがないので、かなり個人的な解釈が含まれている。std::exception#include<exception>std::bad_alloc#include<new>new演算子によるメモリ確保に失敗したときstd::bad_cast#inclu</new></exception>…

template constructer

c++

class Hoge { // x template <typename T> Hoge (); // x template <int val> Hoge (); // o template <typename T> Hoge (T t); // o template <typename T> void func (); }; Hoge hoge; Hoge() コンストラクタはテンプレート引数を指定する方法がないので この書き方は不可能。 Hoge(T t) コンストラク</typename></typename></int></typename>…

AquesTalk2で文字列を音声にする

cd /usr/local/src wget http://******/aqtk2_lnx32_100125.tgz tar zxvf aqtk2_lnx32_100125.tgz cd aquestalk2 ライブラリ配置 cp libAquesTalk2.so.1.0 /usr/lib ln -sf /usr/lib/libAquesTalk2.so.1.0 /usr/lib/libAquesTalk2.so.1 ln -sf /usr/lib/libA…

コンパイル時点でプログラムの問題を見つける

c++ c

#define COMPILE_ASSERT(v) {char compile_assert_tmp[(v)!=0:1:0];(void)compile_assert_tmp[0];} static const size_t ValueMax = 100; static const size_t FirstValue = 1; COMPILE_ASSERT (FirstValue < ValueMax);

bit operatorの意図

c++ c

アンティークなプログラマーは、ビット演算を多用したがる。 現在のコンパイラでは、十分に速いコードを吐くので、 余計なことをせず読みやすいコードを書くべきだが、自分が書かなくても人が書く。 乗算・減算 const int a = 1024; const int b = a << 1; /…

caseはswitchブロック内のどこにでも書ける

c++

int main () { int a = 0; bool b = true; switch (a) { case 0: cout << "pass 0" << endl; while (true) { if (b) { case 1: cout << "pass 1" << endl; } break; case 2: cout << "pass 2" << endl; } break; } }

PHP メンバアクセス制限

C++では、Piyoインスタンスでfuncを呼び出せば、hello!が出力される。 class Hoge { public: virtual ~Hoge () { // do nothing } void func () { a (); } private: void a () { throw "boo!"; } }; class Piyo : public Hoge { private: void a () { print …