Far*_*s M 8 c++ parameters function c++11
我以前见过这样的示例代码
class C
{
C();
~C();
foo(T1, T2);
}
C::foo(T1, T2)
{
//not using T1/T2
}
Run Code Online (Sandbox Code Playgroud)
与这样的传统代码相比
class D
{
D();
~D();
bar(T1 t1, T2 t2);
}
D::bar(T1 t1, T2 t2)
{
//using t1 and t2
}
Run Code Online (Sandbox Code Playgroud)
我想知道为可用性定义类型变量的目的是什么?大多数人这样做只是为了暗示api的那些参数当前没有被使用,但是为了确保将来的向后兼容性?
是可能用于RTTI,还是引用静态变量(尽管我见过的各种样本都没有用于此目的,它们甚至不是模板化函数,变量根本就没用过).我试过搜索这个功能,但我甚至不确定它叫什么或搜索什么.
基本上,使用这种方法的原因/好处/缺点是什么?
dag*_*dag 10
这通常用于抑制有关未使用变量的编译器警告.如果不创建变量名,编译器将不会警告您该变量未在函数中使用.
就像你说的那样,它的参数通常不用于特定的实现:
class an_iface
{
public:
an_iface();
virtual int doSomething(int valNeeded)=0;
}
#define NOT_SUPPORTED -1
class something : public an_iface
{
public:
something();
int doSomething (int) { return NOT_SUPPORTED; }
}
class somethingMore : public an_iface
{
public:
somethingMore();
int doSomething(int stuff) { return stuff * 10; }
}
Run Code Online (Sandbox Code Playgroud)
除了@dag提到的,没有参数名称的函数定义在模板特化中找到它的用法.我知道您已经提到过您发布的示例中没有模板,但为了完整起见,我想发布此用例:
假设您已erase为std容器定义了一个函数.但是你想erase_helper根据容器类型做不同的实际工作.一种常见且可接受的做法是使用traits.
// Tags for containers
struct vector_tag {};
struct map_tag {};
// Trait class
template <typename C> struct container_traits;
// Specialization of trait class
template <typename T, typename A>
struct container_traits<std::vector<T, A>>
{
typedef vector_tag category;
};
template <typename K, typename V, typename C, typename A>
struct container_traits<std::map<K, V, C, A>>
{
typedef map_tag category;
};
// Helper function
template <typename Container, typename X>
void erase_helper(Container& c, const X& x, vector_tag) // <-- no param name
{
// Erase element from vector
}
template <typename Container, typename X>
void erase_helper(Container& c, const X& x, map_tag) // <-- no param name
{
// Erase element from map
}
// Function interface
template <typename Container, typename X>
void erase(Container& c, const X& x)
{
erase_helper(c, x, typename container_traits<Container>::category());
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到,erase_helper有第三个没有名字的参数.参数类型告诉编译器在模板实例化阶段选择正确的函数.
| 归档时间: |
|
| 查看次数: |
4685 次 |
| 最近记录: |