【发布时间】:2016-12-13 07:54:51
【问题描述】:
我有一个函数:
int foo(void * ptr)
{
// ...
}
我可以在 C++11/14 中在语法上(不使用编译器警告等)禁用传递 void * 本身以外的指针吗?
例如,现在可以这样调用:
foo(new int(42));
我需要禁用它。
【问题讨论】:
-
这样做的目的是什么?什么会阻止某人做例如
void* ptr = reinterpret_cast<void*>(new int(42)); foo(ptr);?您能否详细说明用例以及您要解决的实际问题? -
我需要一个“显式”的 void 参数,就像在类构造函数中一样。如果用户明确重新解释它,这是他的权利。实际问题:想象一下智能指针,
std::unique_ptr的一些类似物,它允许void*保持,但仅适用于传递给构造函数的void *参数。 -
那如何使用模板和type-traits?
-
@JoachimPileborg 可能是一个变种,你能帮我吗:如何禁用模板类的方法,并根据模板参数禁用?
-
@JoachimPileborg:这是一个非常愚蠢的论点。这就像说禁止
intptr_t也没有任何意义,因为任何人都可以将reinterpret_cast发送到void*并返回。类型检查是安全功能,而不是安全功能。
标签: c++ c++11 c++14 void-pointers