我正在将一个项目从Java转移到C++,而我在Java中遇到一些相对简单的问题.
我有一个类X来处理Y从中继承的类型和对象的对象Y.X经常需要调用一个方法Y,比方说kewl_method(),这个方法在继承的每个类中都是不同的Y.在Java中,我可以这样做:
public class X<y extends Y>
Run Code Online (Sandbox Code Playgroud)
我所说的kewl_method()在X没有任何头痛,它会做我想做的.如果我理解正确(我是C++的新手),在C++中没有有限的通用性,所以如果我使用模板X就可以用绝对的东西填充它,我将无法调用的变种kewl_method().
在C++中执行此操作的最佳方法是什么?使用演员?
限制:我不能使用boost或TR1.
编译器有时会利用某些"变量"是优化常量的事实,所以在可能的情况下使用"const"关键字通常是一个好主意,但是有权衡吗?
简而言之,是否存在使用"const"实际上可能使代码变慢(甚至一点点)的情况?
我在函数中有以下行来计算序列中'G'和'C'的数量:
count += (seq[i] == 'G' || seq[i] == 'C');
Run Code Online (Sandbox Code Playgroud)
编译器是否足够聪明,当他们看到'count + = 0'时他们没有做任何事情,或者他们真的会浪费时间'加'0?
我试图用泛型扩展一个抽象类,我遇到了一个问题:
abstract public class SomeClassA<S extends Stuff> {
protected ArrayList<S> array;
public SomeClassA(S s) {
// ...
}
public void someMethod() {
// Some method using the ArrayList
}
abstract public void anotherMethod() {
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用另一个抽象类扩展这个类,所以我可以覆盖"someMethod".我试过了:
abstract public class SomeClassB<Z extends Stuff> extends SomeClassA {
public SomeClassB(Z z) {
super(z);
}
@Override public void someMethod() {
// Some method using the ArrayList
}
}
Run Code Online (Sandbox Code Playgroud)
NetBeans没有看到构造函数的任何问题,但我不能在someMethod方法中使用SomeClassA中的ArrayList.所以我尝试过:
abstract public class SomeClassB<Z extends Stuff> extends SomeClassA<S extends Stuff> {
public …Run Code Online (Sandbox Code Playgroud) c ×2
c++ ×2
generics ×2
abstract ×1
const ×1
inheritance ×1
java ×1
optimization ×1
performance ×1
templates ×1