次のような GTK GUI の単純なラッパー クラスがあります。
template <class T>
class LabeledEntry
{
string name;
T var;
Gtk::HBox hbox;
Gtk::Label label;
Gtk::Entry entry;
public:
LabeledEntry( string _name, T _var, Gtk::VBox* vbox):
name( _name ),
var(_var)
{
label.set_text( name.c_str() );
ostringstream os;
os << var ;
entry.set_text( os.str().c_str() );
hbox.add( label );
hbox.add( entry );
vbox->add( hbox);
}
T Get()
{
string valString( entry.get_text());
istringstream is( valString);
is >> noskipws >> var;
return var;
}
};
文字列の空白をスキップすることが機能しないためT Get()
、 if のタイプがT
isの場合に特別な実装が必要です。string
したがって、ここでgetline
メソッドが必要です。
std::is__xxx
などの多くのプロパティに対してチェックするテンプレートがたくさん見つかりましたis_integral
。しかし、特定のタイプと直接比較する必要があります。チャンスはありますか?
そして、クラス内に両方の実装を記述する構文はどうですか? 何かのようなもの:
class ...
{
std::enable_if( true, XXX_IS_STRING)::type Get()
{
}
std::enable_if ( false, XXX_IS_SRING)::type Get()
{
}
};
申し訳ありませんが、メンバ パラメータ リストにテンプレート パラメータを指定せずに SFINAE を使用するのは少し混乱しています。