作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在 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/
我是一名优秀的程序员,十分优秀!