gpt4 book ai didi

c++ - 模板特化中缺少方法

转载 作者:行者123 更新时间:2023-11-28 03:30:01 25 4
gpt4 key购买 nike

  1. 如何确保(类)模板的特化实现了所有功能? (现在只有当我使用 mul 时,我才会收到错误消息。)
  2. traits1/traits2 的 int 特化有什么区别。我认为它们都是模板特化,但 traits2 不接受 static 并给出链接器错误而不是编译器错误。

.

#include <iostream>

template<typename T>
struct traits1{
static T add(T a, T b) { return a+b; } /* default */
static T mul(T a, T b); /* no default */
};

template<>
struct traits1<int> {
static int add(int a, int b) { return a*b; }
/* static int mul(int a, int b) missing, please warn */
};

template<typename T>
struct traits2{
static T add(T a, T b);
static T mul(T a, T b);
};

template<>
int traits2<int>::add(int a, int b) { return a*b; }

/* traits2<int>::mul(int a, int b) missing, please warn */

int main()
{
std::cout << traits1<int>::add(40, 2) << "\n";
// error: mul is not a member of traits1<int>
//std::cout << traits1<int>::mul(40, 2) << "\n";

std::cout << traits2<int>::add(40, 2) << "\n";
// error: undefined reference to traits2<int>::mul(int, int)
//std::cout << traits2<int>::mul(40, 2) << "\n";
return 0;
}

最佳答案

1) 如果您想要的只是某个特定函数的不同行为,请不要特化整个类。单独专门化该功能:

template<>
int traits1<int>::add(int a, int b) { return a*b; }

您无法确保特化实现所有模板方法,因为它们是不相关的。

2) 您没有为 traits2::mul 提供定义,因此您当然会收到链接器错误 - 声明就在那里。

关于c++ - 模板特化中缺少方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12855379/

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