gpt4 book ai didi

c++ - 模板类中未使用的函数必须有效吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:38:28 26 4
gpt4 key购买 nike

在模板中,我有一些函数只对某些模板类型有效。 GCC 似乎对此很满意,但我不确定它是否有效。与典型的 SFINAE 不同,函数本身不是模板。

template<typename T>
struct generic {
T item;
void get_limited() {
item.limited();
}
};

如果我不调用 get_limited,是否可以使用未实现 limited 的类型实例化此类?

如果不是,我该如何解决?我有一个通用容器类,其中某些功能是根据它存储的分配启用的(所以不是直接在上面的类型上,而是仍然是一个模板参数)。

最佳答案

模板函数是按需实例化的,所以如果没有使用该函数,它不一定是正确的,至少对于某些可能的实例化是这样。该标准确实声明,如果模板对任何实例化类型无效,则程序格式错误(尽管不需要编译器对其进行诊断),即使它从未实例化也是如此。

此功能在标准库的不同部分中使用,其中单个函数的要求可能比模板对实例化类型的一般要求更严格。例如,在 std::map 的情况下,一般情况下,值类型不需要是默认可构造的,但是如果你想使用 operator[] 那么它必须如此,因为如果键不存在,该运算符可能需要创建一个空元素。

关于c++ - 模板类中未使用的函数必须有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059115/

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