我需要创建一个这样的模板函数:
template<typename T>
void foo(T a)
{
if (T is a subclass of class Bar)
do this
else
do something else
}
Run Code Online (Sandbox Code Playgroud)
我也可以想象使用模板特化来做它...但我从未见过超类的所有子类的模板特化.我不想为每个子类重复专门化代码
在以下行
class Symbol : public boost::enable_shared_from_this<Symbol> {
我收到错误:
错误:无效使用不完整类型struct boost::enable_shared_from_this<Symbol>
/usr/include/boost/smart_ptr/shared_ptr.hpp:63:错误:声明struct boost::enable_shared_from_this<Symbol>
知道为什么我会收到这个错误.符号是一个抽象类(如果重要的话)
是否有一些注释可以让我告诉java编译器在注释后不应该使用变量?由于现代IDE的自动填充和复制粘贴功能,通过错误输入变量名称来引入错误太容易了.这样的注释将有助于在编译时检测这些错误中的某些错误(如果使用netbeans/eclipse等智能IDE,则会在打字时检测到).举个例子,我有以下字符串处理管道:
String input = ....
String pass1 = op1 (input);
...
String pass2 = op2 (pass1);
...
String pass3 = op3 (pass1); // typo: pass1 should be pass2
...
return pass3;
Run Code Online (Sandbox Code Playgroud)
如果我可以disable pass1在op2调用的行之后说出一些内容,那么调用的行中的拼写错误op3将被检测为pass1超出范围作为假设disable注释的结果.
我希望我可以使用 cout << 打印集合/矢量/地图的内容。对于 stl 设计者来说,实现起来似乎并不困难:假设 << 是为 T 定义的,容器的 << 可以迭代元素并使用 ofstream << 打印它们。
有没有一种我不知道的简单方法可以打印它们?
如果没有,有简单的解决方案吗?我在一些地方读到扩展 stl 类是一个坏主意。是这样吗,为什么?
定义一个重载打印函数之类的东西怎么样?编辑:我正在寻找一个递归函数,它可以处理容器的容器......我同意不同的人会喜欢不同的格式,但可重写的东西总比没有好
将std::map在refernce http://www.cplusplus.com/reference/stl/map/
没有提到任何==oprerator.但我的代码包含m1==m2编译(其中m1和m2是类型map<,>).什么是==对地图做什么?我在看过时的参考吗?
我很惊讶在调用erase时发现了vector :: erase移动元素.我认为它会将最后一个元素与"待删除"元素交换,并将大小减小一个.我的第一反应是:"让我们扩展std :: vector并覆盖erase()".但是我在很多线程中发现了" 从C++ STL容器中获取真的风险吗? ",它会导致内存泄漏.但是,我没有向vector添加任何新的数据成员.因此没有额外的内存可以释放.还有风险吗?
有些人认为我们应该更喜欢构成而不是继承.在这种情况下,我无法理解这个建议.为什么我要浪费我的时间在"机械"任务中包装其他精彩的std :: vector类的每个函数.继承确实对这项任务最有意义 - 或者我错过了什么?
c++ ×5
composition ×1
inheritance ×1
java ×1
map ×1
memory-leaks ×1
ofstream ×1
shared-ptr ×1
stdvector ×1
stl ×1
templates ×1