我最近遇到了這個與函數一起使用的 c++ weired 語法並成功編譯。我無法理解它,這到底是做什麼的。
“*member”如何沒有給我未定義的錯誤或其他東西,因為它沒有在其他任何地方聲明。
誰能告訴我如何調用這個函數?
template<class POS, class META>
size_t test11( META POS:: *member)
{
/********/
}
感謝大家。
當你寫
META POS:: *member
這意味著它member
是指向POS
具有 type的類成員的指針META
。
現在來回答你的第二個問題,
誰能告訴我如何調用這個函數?
下面給出了一個可能的例子:
#include <iostream>
#include <string>
struct Name
{
std::string name;
Name() = default;
Name(std::string pname): name(pname)
{
std::cout<<"Constructor called"<<std::endl;
}
};
template<class POS, class META>
size_t test11( META POS:: *member)
{
//create object of type Name
Name n("Anoop");
//create a pointer to object n
Name *ptrN = &n;
//Now let's use the variable member
std::cout<<ptrN->*member<<std::endl;
return 5;//don't forget to return something since the function has non-void return type
}
int main()
{
//create a pointer to non-static member
std::string Name::*ptrData = &Name::name;
//pass the pointer ptrData to the template function test11<>
test11(ptrData);
}
程序的輸出是:
Constructor called
Anoop
可以在這裡驗證。
當我寫
test11(ptrData);
在上面的代碼示例中,然後使用模板參數推導,POS
推導為類型Name
並META
推導為類型std::string
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句