gpt4 book ai didi

c++ - 防止为给定类型实例化模板化成员函数

转载 作者:太空狗 更新时间:2023-10-29 20:05:03 26 4
gpt4 key购买 nike

我有一个模板化矩阵类,我为各种 POD 类型和自定义类类型显式实例化了它。然而,一些成员函数对于一些这样的自定义类型没有意义。例如:

Matrix<int> LoadFile(....); // This makes sense
Matrix<My_custom_class> LoadFile(...); //This doesn't make sense in the context of the custom class

我可以阻止为选择类型的 Matrix 对象实例化 LoadFile 函数(它是一个成员函数)吗?到目前为止,我通过使 LoadFile 成为友元函数然后显式控制其实例化来避免了这个问题。但是我想知道当 LoadFileMatrix 的成员函数时我是否可以这样做。

最佳答案

第一个问题是你是否真的需要控制它。如果他们在存储 My_custom_class 的矩阵上调用该成员函数会怎样?您能否在您的类(或模板)中提供支持以使成员函数正常工作?

如果你真的想禁止对某些特定类型使用这些成员函数,那么你可以使用特化来阻止特定的实例化:

template <typename T>
struct test {
void foo() {}
};
template <>
inline void test<int>::foo() = delete;

或者甚至只是将 static_assert 添加到通用实现中以验证允许或禁止哪些类型的先决条件?

template <typename T>
struct test {
void foo() {
static_assert(std::is_same<T,int>::value || std::is_same<T,double>::value,
"Only allowed for int and double");
// regular code
}
};

关于c++ - 防止为给定类型实例化模板化成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15627747/

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