【发布时间】:2013-09-09 14:03:28
【问题描述】:
我有一个用于 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 的类型是string,现在我需要一个针对T Get() 的特殊实现,因为跳过字符串的空格不起作用。所以这里我在方法中需要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 有点困惑。
【问题讨论】:
标签: c++ templates c++11 sfinae