由于我在项目中使用的是使用C API的库,我必须使用部分char []
[即使我只想使用std::string
]。
但是,为了避免在将太长的char *
变量复制到修复大小 char []
时出现问题,我试图用模板来解决这个问题。
但不幸的是,我坚持专业化。在项目中我们可以假设 目的地变量始终类型char [fixed-value]
并且它不能 char *
。因此,这很重要,因为确实没有一种可靠的方法可以确定char *
的分配大小。
这就是我迄今为止所做的:
#include <stdio.h>
template <typename T>
void copyWithBoundaryCheck( char destination [], char * source, int maximalSize )
{
printf( "Correct parameter\n" );
};
template <typename T>
void copyWithBoundaryCheck( T, char * source, int maximalSize )
{
printf( "Wrong parameter\n" );
};
int main()
{
char * source = (char *) "Source";
char * wrongPtr = (char *) malloc( 20 );
char destination [20];
copyWithBoundaryCheck( wrongPtr, source, 10 );
copyWithBoundaryCheck( destination, source, sizeof(destination) );
}
这是输出:
Wrong parameter <-- output for copyWithBoundaryCheck( wrongPtr, source, 10 );
Wrong parameter <-- output for copyWithBoundaryCheck( destination, source, sizeof(destination) );
对于copyWithBoundaryCheck( destination, source, sizeof(destination) );
我期待输出Correct parameter
,但我始终收到Wrong parameter
。
我的问题:
如何实现模板函数copyWithBoundaryCheck
到 catch char [numeric-value]
的特化?根据我的示例,这意味着copyWithBoundaryCheck( destination, source, sizeof(destination) );
会显示Correct parameter
。
答案 0 :(得分:4)
你可能正在寻找这样的东西:
<cftransaction>
<cfquery name="queryInsertA" datasource="source" result="resultA">
INSERT INTO tableA (columnName) VALUES (value)
</cfquery>
<cfquery name="queryInsertB" datasource="source">
INSERT INTO tableB (fkey_tableA, columnName) VALUES (#resultA.generatedKey#, value)
</cfquery>
</cftransaction>