gpt4 book ai didi

c++ - 如何重载/专门化模板类函数来处理算术类型和容器类

转载 作者:行者123 更新时间:2023-11-28 04:28:44 27 4
gpt4 key购买 nike

我正在尝试创建一个模板类,其中包含一个可以处理算术数据类型(int、char、float ...)的成员函数和一个容器类,如 Eigen::DenseBase<> 或 std::vector<>

演示我的想法的代码:

template <typename T>class myClass{
...
void foo(T);
...
};

template <typename T> void myClass<T>::foo(T){
//Function for arithmetic Datatypes
}
//Specialization does not work - What is the correct (best?) approach?
template <> void myClass<T>::foo(<Eigen::DenseBase<T>){
//Function for Eigen::DenseBase<T> - Objects
}

这是我使用模板编程的第一步,所以我期待着如何解决这个问题的提示和想法

最佳答案

您正在尝试做的事情称为部分特化。您正在尝试专门化您的 foo 以不同方式处理一系列类型 - 即作为 Eigen::DenseBase 实例的类型。不幸的是,这是不可能的。

模板类的成员函数只能是完全特化的,即可以为特定类型提供实现。例如,这会起作用:

    template <>
void myClass<char*>::foo(char* );

部分特化你的 foo 的唯一方法是将它放入整个类的部分特化中。类似的东西:

template <typename T>
class myClass{
...
void foo(T);
...
};

template<class T>
class myClass<Eigen::DenseBase<T>> {
void foo(Eigen::DenseBase<T> ) { ...}
};

这里需要注意的是,如果您(部分)专门化类,则需要提供原始模板中需要的所有成员(通常有很多拷贝)。这里的标准解决方案是将不依赖于部分特化的所有内容放入基类,并从中继承您的模板和特化。

关于c++ - 如何重载/专门化模板类函数来处理算术类型和容器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560473/

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