1

我有一个变量包装器,它在通过此包装器修改底层变量时发出更改信号,因此其他对象可以监听更改。

它工作正常(即我可以在底层对象上分配、添加、减去、调用成员函数(尽管这些函数无法发出更改信号)等),但有一点小问题:如果我这样做了

struct some_object_type
{
  wrapper<int> some_wrapper;
}

int main()
{
  some_object_type some_object;
  auto value = some_object.some_wrapper;
}

value这里被正确推断为wrapper<int>. 有没有办法让这个结构表现得好像some_object.some_wrapper是 type int,所以它value被推断为一个int变量?

4

1 回答 1

0

@TartanLlama 在他的评论中有正确的解决方案。但是,如果您指定了 ,您想auto推断auto const& value = ...什么?在这种情况下,隐式转换将不起作用。

我以前遇到过这个问题,我能想到的最好的解决方案是提供一个wrapper<T>::operator()函数:

struct some_object_type
{
  wrapper<int> some_wrapper;
}

int main()
{
  some_object_type some_object;
  auto value1 = some_object.some_wrapper;  // deduces to wrapper<int>
  auto value2 = some_object.some_wrapper(); //deduces to int      
}

也许不是您希望的解决方案,但除非您放弃自动类型推断,否则您最好的办法是@TartanLlama 的建议。

于 2016-11-16T03:51:49.767 回答