こんなコードを書く必要性に迫られた。
template<class T>
struct foo{
T operator()( ... ){ ... };
};
std::array< double, ... > a = {{ ... }};
bar( foo< >() ); // < >の中に a の要素の型 double を入れたい
別に手打ちでdouble
と書けば済む話なのだが、何とか型をa
から引っ張り出したい。
そこで調べてみたら、stack overflow に答えがあった。
http://stackoverflow.com/questions/12391814/how-to-get-element-type-from-stl-container-instance (英語)
次のようにすれば良いようだ。
bar( foo< decltype(a)::value_type >() );
// decltype(a)::value_type は double
結構使える機会はあると思うのだが、あまりヒットしなかった。
ひょっとしてこんなことをしなければならないそもそもの設計が間違いなのだろうか。