gpt4 book ai didi

c++ - 依赖于构造函数参数的模板类特化?

转载 作者:行者123 更新时间:2023-11-30 03:06:14 24 4
gpt4 key购买 nike

我正在调查 C++ 类模板的问题。一个类模板是特化的,但编译器并不总是选择使用特化。我发现构造函数参数似乎影响了这一点:

temlate <class T> 
class MyClass { /*some constructors*/ };

template<>
class MyClass <int>
{ void foo(); /*some constructors*/}

MyClass<int> test1;
test1.foo(); //works

MyClass<int> test1("hallo");
test1.foo(); //doesn't work (foo does not exist, compiler uses unspecialized version.)

我还没有设法创建一个示例来说明问题,因为构造函数参数非常复杂(并且简单参数不会出现问题)。

但我的问题很简单:构造函数参数是否可能影响编译器的选择?怎么办?

我正在使用 Visual C++ 2008。

非常感谢!

---- 编辑:

我们似乎已经确定了问题所在:如果模板特化不是我们构建的静态库中所有翻译单元的一部分,就会出现问题。但如果没有其他翻译单元,它就会消失。

我找到了 http://codeidol.com/cpp/cpp-templates/Instantiation/Implementation-Schemes/在我看来,使用贪心实现可以解释我们观察到的现象。

有人知道MSVC和GCC实际使用了哪些实现方案吗?

最佳答案

But my question is simply this: Is it possible, that constructor arguments influence the choice of the compiler? How?

不,因为你告诉它你想使用哪种类型:

MyClass<int> test1; 
test1.foo(); //works

总是创建特殊类型的对象。

关于c++ - 依赖于构造函数参数的模板类特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828543/

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