不确定是否可以这样做。 我有一个示例函数,需要返回模板
template <class T>
T example(DWORD DW)
{
PVOID buffer;
// my code is here sets the buffer
return static_cast<T>(&buffer);
}
想像这样使用它
int iReturn = example<int>(dwSomeDword);
答案 0 :(得分:1)
LoadFile /usr/lib64/libxml2.so
LoadFile /usr/lib64/liblua-5.1.so
LoadModule security2_module modules/mod_security2.so
httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin email@domain.com
DocumentRoot "/var/local/apache/httpd2.4.18/htdocs"
ServerName servername.fqdn.com
# For http to https redirect
Redirect / https://servername
TraceEnable off
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
SecRuleEngine On
#SecFilterEngine On
#SecFilterForceByteRange 32 126
#SecFilterScanPOST On
#SecFilter "<( |\n)*script"
SecRequestBodyAccess On
SecResponseBodyAccess On
ErrorLog "logs/error_log"
CustomLog "logs/access_log" common
</VirtualHost>
的类型为buffer
。因此,使用address-of运算符:void*
会为您提供&buffer
。并且void**
不能void**
加入static_cast
(除非您碰巧实例化T
,但即便如此,返回的指针也会悬空)。
这在语法上是正确的:
example<void**>
该程序将void指针强制转换为指向return *static_cast<T*>(buffer);
的指针,然后取消引用它。但是没有必要这个诡计。只需首先创建T
,对其进行操作,然后将其返回:
T
这有许多优点。编译器会为您处理内存别名以及正确构造结果。这也使命名返回值优化成为可能,允许删除副本。