我有一个用于 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()
判断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 有点困惑。