2013-12-11 54 views
-3

我不是指朋友函數。我想沒有一種方法可以像C++一樣在任何其他語言中實現這一點。我對嗎?如何在一個類的範圍內定義一個函數,但不能作爲成員函數

背景:

我有一類答:我知道一個輔助函數有幾個選擇這裏

(1)A類是在

它在同一個名字聲明

(2)把它作爲A類

我只是在想,如果有可能做的是一種以上兩者的結合以下的靜態函數。即,

我想要的功能是根據權的範圍,但沒有A級

的成員函數我希望這是更清晰了。非常感謝。

+1

你的意思是像靜態功能? –

+3

函數在類的範圍內但不是成員意味着什麼?你需要澄清你想要的東西,甚至可以用僞代碼來達到預期的用途。 –

+0

爲什麼不把「自由函數」放在命名空間而不是類?你想解決什麼問題? – doctorlove

回答

0

我通常這樣做的方式是在.C++文件中用'static'限定符聲明一個函數。請認識到這與C++'靜態'函數的正常使用不同。

如果您在聲明 'bar.C++'(而不是「bar.h ++):

static void foo() {} 

...這是一個函數,而不是它的目標文件之外 '可見的'。即一個本地幫手功能。

所以要精確:

bar.h ++;

class bar 
{ 
    void f(); 
}; 

bar.C++;

#include "bar.h++" 
static void foo() {} 
void bar::f() { foo(); } 

乾杯!

2

你的意思是一個靜態成員函數。

class T 
{ 
    static void lol(); 
}; 

void T::lol() 
{ 
    /* ... */ 
} 

int main() 
{ 
    T::lol(); 
} 

這是不是真的「在類的範圍內」比任何一個免費的功能更會是這樣,因爲能夠真正的意思的唯一事情就是訪問成員變量和成員變量的訪問需要實例。

但這是最接近你問的。

+0

他可能意味着,即使問題明確要求不是這樣:這是一個靜態*成員函數。 –

+0

@DavidRodríguez-dribeas:......這就是我的答案所說的。 –

+1

@DavidRodríguez-dribeas請認爲這個問題沒有意義,而且顯然OP對他在做什麼沒有想法。 – 2013-12-11 17:00:24

1

你的意思是像一個靜態函數嗎?

class Foo 
{ 
    void memberFunction(); 
    static void classFunction(); 
}; 

Foo foo; 
foo.memberFunction(); // called as a member function 
Foo::classFunction(); // called on the class, no object necessary 

這基本上是C++「範圍」中的一個函數。雖然我不確定你的意思。如果你只是指命名空間,那麼就是這樣。

+0

從技術上講,這是一個靜態*成員*函數,可能是他想要的,但目前還不清楚 –

1

你可以聲明爲靜態函數 - 這是對類的定義,但它並不需要訪問該類的成員變量的任何特定實例的功能:

static int foobar()...

哪個然後用

Foo::foobar();

如果你想限制功能,所以它只能從類中調用的範圍,可以使將其稱爲private很像任何其他成員函數。

如果你願意,沒有什麼從創建一個標準的成員函數,只是不訪問任何成員變量阻止你...

0

可以聲明一個嵌套類:

class A 
{ 
    class X 
    { 
     void helper(A object) 
     { 
      std::cout << object.member; 
     } 
    }; 
    int member; 
}; 

這裏helper是成員函數Y,而不是類A。我不知道這是如何幫助你。

相關問題