接收std :: Pair作为参数并从支撑列表初始化中推论的模板函数
A templated function that receives std::pair as an argument and deduces the types from braced-list initialization
我正在尝试创建一个接收std ::配对的模板功能,我希望类型为
当我调用用支撑列表初始化调用函数时,隐式推导而无需指定。我尝试了以下代码,但没有编译(我正在使用Visual Studio 2017)。
我很乐意帮助完成这项工作。
谢谢。
template <typename Key, typename Value>
void foo(std::pair<Key, Value> arg)
{}
int main()
{
foo({1.0, "some string"}); // doesn't compile
foo(std::pair{ 1.0, "some string" }); // compiles when I specify the type this way
return 0;
}
初始器列表诱导了所谓的"非矿床上下文",它们在模板参数扣除方面效果不佳。您可以提供额外的过载
template <typename Key, typename Value>
void foo(Key&& k, Value&& v)
{
foo(std::make_pair(std::forward<Key>(k), std::forward<Value>(v)));
}
只需将调用转发到您的原始功能模板,并且可以通过
调用。foo(1.0, "some string");
请注意,呼叫语法省略了括号。当然,如果您只想只有一个模板,则可以将原始的foo
实现直接放入此新功能模板的主体中。
相关文章:
- 正在初始化函数指针的constexpr数组
- 我应该在C++中使用构造函数还是初始化函数
- 使用 extern const 初始化函数
- 初始化函数中的静态变量,而不是在文件开始时
- 如何初始化函数中指针数组的大小
- 正在初始化初始化函数中的静态类成员
- call_once初始化函数
- SWIG + CMAKE:缺少初始化函数
- 如何创建在 c++ 中只读取一次的初始化函数
- 类内的强制初始化函数
- 使用元编程在编译时初始化函数数组
- 数组初始化函数:将数组作为指针传递:C++
- 从nodejs模块初始化函数报告失败
- 导入错误:动态模块未定义初始化函数
- 大括号初始化函数指针数组:从 'void (*(*)())()' 到 'void (*)()' 的转换无效
- 奇怪的行为,用 int 初始化函数指针
- 使用 init_seg 调用初始化函数
- 正在初始化函数内部的std::数组
- 初始化函数内部的指针.它是如何工作的
- JNI初始化函数以及缓存类和字段