【发布时间】:2015-12-17 11:38:31
【问题描述】:
我有以下类层次结构:
class FilterMktData
{
virtual std::vector<std::string> filter(std::vector<std::string>) = 0;
...
}
class FilterMktDataDecorator : public FilterMktData
{
virtual std::vector<std::string> filter(std::vector<std::string>);
...
}
template<typename T>
class FilterBy : public FilterMktDataDecorator
{
std::vector<std::string> filter(std::vector<std::string>);
...
}
class FilterByVolume : public FilterBy<int>
{
...
}
我正在使用装饰器模式。 FilterMktData 是接口,FilterMktDataDecorator 是提供接口实现的类,该接口将实际工作委托给指向 FilterMktData 的内部共享指针。这个指针被传递给构造函数。
现在,类模板 FilterBy 通过使用传递给构造函数的 lambda 表达式来实现过滤器方法(我使用的是 std::function<bool(T)> 类型的参数)。这个想法是过滤评估时返回true的元素。有必要引入模板,因为元素是 std::strings 并且必须在将它们传递给 lambda 表达式之前进行转换,并且可以是任何东西。
最后,FilterByVolume 将 lambda 表达式传递给 FilterBy<int> 的构造函数,如果音量小于某个值,则返回 true。
我已经测试了这些类的行为,它们按预期工作。唯一的问题是我收到以下编译器警告
FilterBy.h(51): warning C4505: 'FilterBy<int>::filter' : unreferenced local function has been removed
仅在我的 main.cpp 中包含 FilterByVolume 的头文件,而不是当我包含 FilterBy 的头文件时,即使我的main 不会实例化上述类的任何对象。
问题:如何消除警告?
感谢您的帮助。
【问题讨论】:
-
这个警告是噪音。永远不要为 C++ 代码启用它。
标签: c++ templates design-patterns compiler-warnings