gpt4 book ai didi

c++ - 使用变量模板调用可变参数函数

转载 作者:太空狗 更新时间:2023-10-29 23:12:40 25 4
gpt4 key购买 nike

考虑以下代码:

template<typename T, typename... Args>
void foo(const Args&... args)
{
//...
}

template<typename... Args>
auto fooChar = foo<char, Args...>;

template<typename... Args>
auto fooInt = foo<int, Args...>;

为了能够使用这些变量模板,我需要明确地键入模板参数,如下所示:

fooChar<int, char, const char*>(5, 'a', "bar");

但是,在标准可变参数函数调用中,模板参数是根据实际函数参数类型隐式推导的。换句话说,我希望能够像这样使用变量模板,但额外的间接级别似乎限制了这一点:

fooChar(5, 'a', "bar");

显然,我可以简单地定义简单的包装函数而不是变量模板,如下所示:

template<typename... Args>
void fooChar(const Args&... args)
{
return foo<char>(args...);
}

template<typename... Args>
void fooInt(const Args&... args)
{
return foo<int>(args...);
}

但总的来说,它看起来更笨重而且不太方便。那么,有什么方法可以在使用变量模板时获得相同的结果吗?如果不是,为什么编译器不可能将参数“转发”给别名函数,从而推导出可变参数类型?

最佳答案

您可以将 foo() 包装在一个结构中:

template <class T>
struct fooWrapper {
template <class... Args>
void operator()(Args const&... args) const {
foo<T>(args...);
}
};

现在让你的变量模板成为这个包装器的实例:

fooWrapper<char> fooChar;
fooWrapper<int> fooInt;

额外的好处是您可以将 fooChar 传递给函数模板,因为它本身不是函数模板。

关于c++ - 使用变量模板调用可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44412648/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com