gpt4 book ai didi

c++ - (默认)为每个可变类型构造一个对象

转载 作者:可可西里 更新时间:2023-11-01 18:27:22 28 4
gpt4 key购买 nike

考虑这个代码片段:

void Foo(std::string str1, std::string str2) {}

template<typename... Types>
void Bar()
{
Foo(Types{}...); // wont compile
}

Bar<std::string, std::string>();

我在这里要做的是在 Bar 方法中默认构造两个 std::string 对象,并将它们传递给 Foo。然而,我徒劳的尝试(其中一个在代码片段中)不会编译,所以我想知道这是否可能。

我使用 VC 2013 编译,这会向我抛出编译器错误。如评论中所述,其他编译器可以处理它。谁能判断上面的代码片段是否符合标准?

最佳答案

这是MSVC可变参数模板扩展过程中的问题;当它解压缩类型列表时,它无法将它们识别为适合构造函数调用。作为解决方法,您可以执行类型转换以强制编译器识别它们:

template<typename T> using identity_t = T;  // NEW CODE

void Foo(int, int);

template<typename... Types>
void Bar()
{
Foo(identity_t<Types>{}...); // use identity type transformation
}

int main() {
Bar<int, int>();
}

我还没有找到问题编号。

关于c++ - (默认)为每个可变类型构造一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21612672/

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