This question already has answers here:
Where and why do I have to put the “template” and “typename” keywords?
(6个答案)
5年前关闭。
TL; DR:
函数的以下语法返回类型和return语句是什么意思? (来自
题
在尝试了解these lines中发生了什么时,我遇到了一些比较笨拙的语法:
在最后一行中,调用了“重新运行“抛出”构造代理对象”(boost documentation)的函数。显然,它允许我们使用要传递给
在这里,我的理解停止了:
看来函数构造有两种返回类型, 函数似乎实际上返回了两个对象/部分:
语法
关键字
实例化类型为
(6个答案)
5年前关闭。
TL; DR:
函数的以下语法返回类型和return语句是什么意思? (来自
boost::interprocess
的代码)template <class T>
typename segment_manager::template construct_proxy<T>::type
construct(char_ptr_holder_t name)
{ return mp_header->template construct<T>(name); }
题
在尝试了解these lines中发生了什么时,我遇到了一些比较笨拙的语法:
//Create a new segment with given name and size
boost::interprocess::managed_shared_memory segment(boost::interprocess::create_only,
"MySharedMemory", 65536);
//Initialize shared memory STL-compatible allocator
const ShmemAllocator allocator(segment.get_segment_manager());
ShmVector* v = segment.construct<ShmVector>("ShmVector")(allocator);
在最后一行中,调用了“重新运行“抛出”构造代理对象”(boost documentation)的函数。显然,它允许我们使用要传递给
construct proxy
的构造函数的参数(模板参数)来调用此ShmVector
。由于找不到construct proxy
的文档,因此我决定看一下并找到following code:template <class T>
typename segment_manager::template construct_proxy<T>::type
construct(char_ptr_holder_t name)
{ return mp_header->template construct<T>(name); }
在这里,我的理解停止了:
typename segment_manager::template
和construct_proxy<T>::type
,这对我来说没有意义template
用作类成员(segment_manager
,mp_header
),这样禁止使用关键字吗? 语法
return partA partB;
暗示了这一点。 最佳答案
return mp_header->template construct<T>(name);
关键字
template
用于指示construct
是*mp_header
类型的成员模板。您可以将其想象为:return mp_header->construct<T>(name);
实例化类型为
construct
的T
成员函数,以name
作为参数调用它,然后返回结果。但是,由于template
具有依赖类型,因此C++在这里需要使用mp_header
关键字。另请:Where and why do I have to put the "template" and "typename" keywords?关于c++ - C++语法:return语句,在 “template”后带有空格;这是什么意思,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30519682/
10-14 03:44