之前看專案**在實現表驅動方法時,經常會遇到這樣的**:
// enum ;
// std::map> foo::m;
// void foo::func0(){}
// void foo::func1(){}
// void foo::func2(){}
void foo::
init()
時間長了以後,我一度認為std::bind
的第乙個引數是乙個非靜態類成員函式時,第二個引數只能是相應類物件的指標,因為一直以來都有非靜態類成員函式的第乙個引數是隱含的this
指標的說法。直到遇到下面的**:
asio::
async_write
(socket_, asio::
buffer
(message_)
, boost::
bind
(&tcp_connection::handle_write,
shared_from_this()
, asio::placeholders::error,
asio::placeholders::bytes_transferred)
);
第二個引數還能是std::shared_ptr
???
開啟後才發現,第二個引數可接受的型別遠比我想象的多,第二個函式不但能接受物件指標,還可以接受物件引用,甚至是另乙個std::bind
返回的可呼叫物件,下面是**:
#include
#include
class
foovoid
print()
static foo create
(int key)
private
:int m_key;};
template
<
typename t>
class
t &operator*(
)private
: t *m_p;};
intmain()
我總結出了6類情況,具體類別可見**中的注釋。std::shared_ptr
對應的是最後一種情況。
感覺好麻煩,還是用lambda
表示式吧。
靜態類 和 非靜態類的區別
1 不能在靜態類中宣告例項成員 變數和方法 2 非靜態類中可以呼叫靜態類中的成員和方法 3 呼叫靜態類中的成員或方法時不需要例項化 4 非靜態類中可以宣告靜態成員或靜態方法 5 靜態方法的使用效率比非靜態方法的使用效率高 6 靜態方法與靜態成員變數一樣,屬於類本身,在類裝載的時候被裝載到記憶體,不自...
類中的靜態 非靜態方法
c 的類中可以包含兩種方法 靜態方法和非靜態方法。使用了static 修飾符的方法為靜態方法,反之萴是非靜態方法。靜態方琺是 種 特殊的成園方琺,它不屬紆類的某乙個具體的實唎,而是屬於類本裑。葰以對靜態方法不需要首先建立乙個類哋例項,而是採用類名.靜態方法的格式 1.static方法是類中的乙個成園...
類中的靜態 非靜態方法
c 的類中可以包含兩種方法 靜態方法和非靜態方法。使用了static 修飾符的方法為靜態方法,反之萴是非靜態方法。靜態方琺是 種 特殊的成園方琺,它不屬紆類的某乙個具體的實唎,而是屬於類本裑。葰以對靜態方法不需要首先建立乙個類哋例項,而是採用類名.靜態方法的格式 1.static方法是類中的乙個成園...