我有这段代码:
class A
{
public:
A(int _a, int _b = 0) : a(_a), b(_b) {}
void f(){}
#if _b == 0
void g(){}
#endif
private:
int a;
int b;
};
int main()
{
A x(1);
x.g();
return 0;
}
我希望A只有当b为0时才有方法g()。我知道上面的代码不起作用,但我想知道是否有某种方法可以实现这一点。
答案 0 :(得分:2)
没有。这些值仅在运行时已知。但是你可以检查函数中的值并使其合适。
答案 1 :(得分:1)
您应该使用模板并提供维数作为模板参数(编译时常量)。然后使用专门化来提供不同的接口:
class Matrix_base {...}; // common code
template <int Dimensions>
struct Matrix;
template <>
struct Matrix<1> : Matrix_base {
int operator[]( std::size_t idx ) const {
// ...
}
};
template <>
struct Matrix<2> : Matrix_base {
int operator()( std::size_t idx1, std::size_t idx2 ) const {
// ...
}
}
// ...
Matrix<1> v( 10 );
std::cout << v[5];
// v(5,1) // error
Matrix<2> m( 10, 20 );
// std::cout << m[5]; // error
std::cout << m(5,1);
答案 2 :(得分:0)
b
仅在运行时才知道。如果您调用函数并且b
非零,我建议抛出异常。
void g()
{
if(b == 0)
{
Exception e("error..."); // Your exception class or a std::exception class
throw e;
}
// The code from here will not be executed
}