c++ - 在被调用方站点强制进行重载选择
问题描述
给定代码:
#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}} {}
正确的重载被委托给。
推荐阅读
- playframework - 如何为 sbt 中提供的传递依赖提供版本?
- php - Codeigniter LEFT JOIN 未按预期工作
- function - haskell 中的函数 (.).(.)
- python - peewee:Python int 太大而无法转换为 SQLite INTEGER
- c# - TypeScript 代理名称已创建
- reactjs - TypeError: Cannot read property 'list' of null
- json - 如何在 Typescript 中将 Matrix HTML 转换为 JSON(用于通过 api 发送)
- protractor - 量角器:选择元素
- javascript - 为什么react中的get request没有传入request header?
- html - 在没有引导程序的情况下对齐列和行中的 div