给定代码:
#include <iostream>
#include <functional>
#include <type_traits>
using ftype = int ( int ) ;
using function_type = std::function<ftype> ;
struct STest
{
STest(bool b) { }
STest(function_type f) { }
};
int AFunction ( int parm )
{
return (parm + 1);
}
int main()
{
STest ss(&AFunction);
return 0;
}
main()函数中'ss'的构造导致使用带有bool的构造函数,而我希望使用带有function_type的构造函数。显然,可以通过以下方法在调用方站点解决此问题:STest ss(&AFunction);
至STest ss(static_cast<function_type>(&AFunction));
并且将使用采用function_type的构造函数。但是我有什么办法可以在STest结构中的被调用者站点上更改代码,以便使用带有函数类型的构造函数,即使我只是将STest ss(&AFunction);
指定为代码,而无需更改每个构造函数采用的类型。 最佳答案
似乎您唯一声明的要求是不更改现有的构造函数。
但是您没有说不添加另一个重载:
STest(ftype f) : STest{function_type{f}} {}
正确的重载被委托(delegate)给了。关于c++ - 强制在被调用者站点上进行过载选择,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/64639823/