我正在尝试编写一个具有多个类型参数的模板类T1
和T2
。该班有一个std::promise<T2>
类型的私人成员。 。基于模板类型参数的条件成员签名和实现
template <class T, class T2>
class Test
{
public:
void setValue(T2 value)
{
promise.set_value(value);
}
void setValue()
{
promise.set_value();
}
private:
std::promise<T2> promise;
};
该类编译就好了,当T2
是什么,但无效(只要你不叫setValue
不带参数当T2
是无效的,我得到一个编译错误:
error C2182: 'value' : illegal use of type 'void'
当T2
是无效的,我想使用第一个setValue
方法,它有一个T2
类型的单一参数。当T2
是无效的,我想使用第二个setValue
方法,它没有参数。很多例子,但我我对模板编程相对来说比较陌生,而且我似乎无法使它工作。
是否有可能用std :: enable_if做到这一点?还是模板专业?
复制我的答案。 ;) – ypnos
@ypnos:检查你的编辑时间戳 –
谢谢,解决了它!但是,我有另一种访问'promise'的方法,这是'Test'无法访问的。我应该在哪里放置这种方法?我当然可以保护它,但我只是想知道它是否可以以不同的方式完成。 – jkokorian