c++ - C++ 类中的任何泛型类型

标签 c++ templates types wildcard

在 C++ 中是否有一种方法可以将任何类型*指定为模板的类型,例如通过通配符或某些关键字。

我记得在 Java 中我们可以使用 ?通配符作为通用类型,例如 HashMap<Long, ?> .

我尝试使用示例代码更好地解释问题。假设我们有以下 Record 类:

template<typename T>
class Record
{
    private:
        T content;
        long size;

    public:
        Record(T _content, long _size)
        {
            this->content = _content;
            this->size = _size;
        }

        T getContent()
        {
            return this->content;
        }

        long getSize()
        {
            return this->size;
        }
};

并且假设我们想要使用上述类的实例而不指定确切的类型(我在下面的类中使用了?),仅仅是因为在 Computer 类仅使用方法 Record::getSize() 的情况下无用。 :

class Computer
{
    public:
        long long computeTotalSize(vector<Record<?>> recordVector)
        {
            long long totalSize = 0;
            for (vector<Record<?>>::iterator it = recordVector.begin() ; it != recordVector.end(); ++it)
                totalSize += (*it).getSize();

            return totalSize;
        }
};

最佳答案

您可以使 computeTotalSize 成为模板函数,并将 record 模板参数作为模板参数:

template <typename T>
long long computeTotalSize(vector<Record<T>> recordVector)
{
    long long totalSize = 0;
    for (vector<Record<T>>::iterator it = recordVector.begin() ; it != recordVector.end(); ++it)
        totalSize += (*it).getSize();

        return totalSize;
}

请注意,您还应该通过引用传递 vector 以避免复制整个内容:

long long computeTotalSize(const vector<Record<T>>& recordVector)

关于c++ - C++ 类中的任何泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34746243/

相关文章:

c++ - 使用 C++ 向 MYSQL 表中插入字符

c++ - 从通用外部类返回指向嵌套内部类的指针

c - C中的struct由1个字段组成,是同一类型的字段吗?

c++ - Xcode 中控制台应用程序没有输出

c++ - 项目库存添加/编辑/查看问题

c++ - GUI 卡住时显示带有 QThread 的 QMessageBox

c++ - 在可变参数模板方法和普通模板方法之间进行选择的规则是什么?

visual-studio-2010 - Visual Studio 2010 : How to change stored procedure template

c++ - 命名空间中的无效数据类型转换

scala - 检测传递给 Ints 列表上的 flatMap 的函数中的参数类型