gpt4 book ai didi

c++ - 有没有办法强制自动推导考虑 operator () 而不是复制赋值?

转载 作者:太空宇宙 更新时间:2023-11-04 13:09:34 25 4
gpt4 key购买 nike

我有一个变量包装器,当底层变量通过这个包装器被修改时,它会发出变化信号,这样其他对象就可以监听变化。

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

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类型为 int ,所以 value被推断为 int多变的?

最佳答案

@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 的建议。

关于c++ - 有没有办法强制自动推导考虑 operator <some_type>() 而不是复制赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40545714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com