首页 > 解决方案 > 在被调用方站点强制进行重载选择

问题描述

给定代码:

#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);为代码,而不更改每个构造函数采用的类型。

标签: c++overload-resolution

解决方案


看来您唯一声明的要求是不要更改现有的构造函数。

但是您没有说不添加另一个重载:

STest(ftype f) : STest{function_type{f}} {}

正确的重载被委托给。


推荐阅读