我们有2种方法在仅头文件库中声明函数.他们是inline和 template<class = void>.在boost源代码中,我可以看到两种变体.示例如下:
inline void my_header_only_function(void)
{
// Do something...
return;
}
template<class = void> void my_header_only_function(void)
{
// Do something...
return;
}
Run Code Online (Sandbox Code Playgroud)
我知道根据C++标准有什么区别.但是,任何C++编译器都不仅仅是标准的,而且标准也经常不清楚.
在从不使用模板参数且与递归可变参数模板无关的情况下,主流编译器的两个变体之间是否存在(以及什么)实际差异?
我认为这可以用作允许来自外部库代码的库扩展(或模拟)的奇怪方法,方法是void在同一名称空间中提供函数的特殊化或非模板版本:
#include <iostream>
template<class = void>
int
foo(int data)
{
::std::cout << "template" << std::endl;
return data;
}
// somewhere else
int
foo(int data)
{
::std::cout << "non-template" << std::endl;
return data;
}
int main()
{
foo(1); // non template overload is selected
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |