如何使用模板作为参数调用函数

时间:2019-02-14 01:59:43

标签: c++ std

我对C ++还是很陌生,我无法找到一个简单的答案,即是否可以调用以模板作为参数的函数,而不必先初始化该模板。

我希望能够直接调用我的函数,例如:

#include <map>
#include <string>

void foo(std::multimap<std::string, int> &bar)
{
    ...
}

int main(int ac, const char *av[])
{
    foo({{"hello", 1}, {"bye", 2}});
    return (0);
}

有没有办法在c ++中做到这一点?

1 个答案:

答案 0 :(得分:3)

不允许使用非const的临时变量引用,因为临时变量在您有机会对其进行任何处理并留下悬挂引用之前会超出范围。

您可以

void foo(std::multimap<std::string, int> bar)
{
    ...
}

或者,由于const个引用获得了免费的有效期延长,

void foo(const std::multimap<std::string, int> &bar)
{
    ...
}

如果您不希望函数修改multimap

有用的额外阅读内容:

What are rvalues, lvalues, xvalues, glvalues, and prvalues?

Why do const references extend the lifetime of rvalues?