boost::ref

トップページ > 関数型プログラミング >

abstract

必要なヘッダ
<boost/ref.hpp>
出来ること
参照を作る
リファレンス
en / jp

sample

#include <iostream>
#include <boost/ref.hpp>
using namespace std;

void assign( int& a, int b )                { a = b; }
template<typename T> void f( T x, int val ) { assign( x, val ); }

int main()
{
	int a = 10;
	cout << a << endl;

	// この呼び出し方ではaの値を変更できない(fのTはint型になってしまう)
	f( a, 20 );
	cout << a << endl;

	// 参照型にキャストしてみてもやっぱりダメ(これでも値渡しになる)
	f( (int&)(a), 30 );
	cout << a << endl;

	// こんな手はあり
	f<int&>( a, 40 );
	cout << a << endl;

	// こんな手もあり
	f( boost::ref(a), 50 );
	cout << a << endl;

	return 0;
}

出力例

10
10
10
40
50

etc

関数templateに対しとして参照を渡すための補助として使うことが出来ます。 普通に渡したのでは値渡して判断されて扱われてしまうため、 上の例の様に、パラメータが参照であることを明示的に指定するか、 boost::refでその挙動を避けることになるわけですね。

constオブジェクトへの参照を作る boost::cref() なんてものあります。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0