在c ++中,我可以拥有一个只在某些条件下才具有某些功能的类吗?

时间:2012-09-14 18:37:03

标签: c++ methods

我有这段代码:

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()。我知道上面的代码不起作用,但我想知道是否有某种方法可以实现这一点。

3 个答案:

答案 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
}