gpt4 book ai didi

c++ - 我可以在不实例化的情况下使用函数对象吗?

转载 作者:太空狗 更新时间:2023-10-29 23:37:12 26 4
gpt4 key购买 nike

具有以下代码:

template<typename T, typename OutStream = std::ostream> struct print {
OutStream &operator()(T const &toPrint, OutStream &outStream = std::cout) const {
outStream << toPrint;
return outStream;
}
};

这个调用是错误的:

print<int>(2);

错误信息:

1>main.cpp(38): error C2440: '<function-style-cast>' : cannot convert from 'int' to 'print<T>'
1> with
1> [
1> T=int
1> ]
1> No constructor could take the source type, or constructor overload resolution was ambiguous

这个调用没有错误:

print<int> intPrinter;
intPrinter(2);

我可以在没有实例化的情况下以某种方式使用函数对象吗?我不能在这里使用模板函数,因为我需要部分特化功能。

最佳答案

我觉得你想说

print<int>()(2);

在这里,第一个 parens 创建了一个临时的 print<int>通过调用(零参数)构造函数来调用对象,然后第二个括号实际上调用该对象上的函数调用运算符。你现在得到的错误是由于

print<int>(2);

被解释为类型转换表达式,将 2 转换为 print<int> ,这不是您想要的(也不合法)。

希望这对您有所帮助!

关于c++ - 我可以在不实例化的情况下使用函数对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9152391/

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