gpt4 book ai didi

c++ - 这个模板 "specialization"代码在做什么,为什么它可以编译但不能按预期工作?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:01 24 4
gpt4 key购买 nike

我正在尝试 specialize just one method of a class template .

那里接受的答案确实有效,但是这段代码对编译器意味着什么,为什么它没有按预期工作?

#include <stdio.h>

template <typename T>
struct Node
{
void split() { puts( "Default method" ) ; }

// this compiles, but it doesn't appear to do anything!
template <int> void split() { puts( "Int method" ) ; }
} ;

// This definitely works
//template <> void Node<int>::split() { puts( "Int method" ) ; }

int main()
{
Node<double> n ;
n.split() ; // "Default method"

Node<int> i;
i.split(); // "Default method" again!
}

最佳答案

您的变体定义了一个单独的模板函数 split,它采用整数(值)模板参数,而不是特化。

要调用它,您必须使用例如:

n.split<1>();

关于c++ - 这个模板 "specialization"代码在做什么,为什么它可以编译但不能按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331036/

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