gpt4 book ai didi

c++ - C++ 98 中的部分模板特化?

转载 作者:行者123 更新时间:2023-12-02 18:41:53 25 4
gpt4 key购买 nike

C++ 98 支持部分模板规范吗?

以下代码在 C++ 11 下可以正常编译,但在 Visual C++ 6.0 中无法编译。
所以我想知道语法是否需要略有不同,或者只是不支持:

#include <iostream>
#include <string>

template <typename A, typename B> class Foo
{
public:
static void bar(A a, B b)
{
std::cout << "A";
};
};

template <typename A> class Foo<A, std::string>
{
public:
static void bar(A a, std::string b)
{
std::cout << "B";
};
};

template <typename B> class Foo<std::string, B>
{
public:
static void bar(std::string a, B b)
{
std::cout << "C";
};
};

template <> class Foo<std::string, std::string>
{
public:
static void bar(std::string a, std::string b)
{
std::cout << "D";
};
};

int main(int argc, char* argv[])
{
Foo<int, int>::bar(12, 42);
Foo<int, std::string>::bar(12, "");
Foo<std::string, int>::bar("", 42);
Foo<std::string, std::string>::bar("", "");

return 0;
}

错误消息:

Compiling...
Test.cpp
C:\test\test.cpp(20) : error C2989: 'Foo<A,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >' : template class has already been defined as a non-template class
C:\test\test.cpp(20) : error C2988: unrecognizable template declaration/definition
C:\test\test.cpp(29) : error C2989: 'Foo<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,A>' : template class has already been defined as a non-template class
C:\test\test.cpp(29) : error C2988: unrecognizable template declaration/definition
Error executing cl.exe.

Test.obj - 4 error(s), 0 warning(s)

最佳答案

Microsoft Visual C++ 6.0 不支持部分模板特化。这是一个known bug .

有关 VC++6.0 的更多已知标准合规性问题,请参阅 here .


存档链接,因为这些知识库文章似乎已从 Microsoft 数据库中删除

关于c++ - C++ 98 中的部分模板特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67898278/

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