显式void指针作为函数参数

弗拉顿

我有一个功能:

int foo(void * ptr)
{
   // ...
}

我可以在语法上(不带有编译器警告等)在C ++ 11/14中禁用除void *自身以外的指针传递吗?

例如,现在可以这样称呼它:

foo(new int(42));

我需要禁用此功能。

天顶

您可以将函数转换为模板,然后使用static_assertstd::is_voidtype_traits

template<typename T>
int foo(T *ptr) {
    static_assert(std::is_void<T>::value, "!");
   // ....
}

否则,可以使用std::enable_if_ton返回类型:

template<typename T>
std::enable_if_t<std::is_void<T>::value, int>
foo(T *ptr) {
    // ....
    return 0;
}

依此类推,其他用户已经用他们的答案提出了其他有趣的解决方案。

这是一个最小的工作示例:

#include<type_traits>

template<typename T>
int foo(T *ptr) {
    static_assert(std::is_void<T>::value, "!");
    // ....
    return 0;
}

int main() {
    int i = 42;
    void *p = &i;
    foo(p);
    // foo(&i); // compile error
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

void **指针和void * []作为函数参数

来自分类Dev

将指针传递给成员函数作为void *函数的参数

来自分类Dev

具有void * a和指针函数作为参数的函数

来自分类Dev

将函数转换为通用 void 指针作为函数参数

来自分类Dev

指针作为函数的参数

来自分类Dev

指针强制指向void指针的显式强制转换

来自分类Dev

函数参数中的void指针

来自分类Dev

当我显式调用构造函数作为参数时,未调用move构造函数

来自分类Dev

C ++ 20“熟悉的模板” lambdas:在函数指针转换中指定显式参数

来自分类Dev

发送显式 CURSOR 作为过程参数

来自分类Dev

接口指针作为函数参数

来自分类Dev

函数指针作为模板参数

来自分类Dev

指针作为函数参数的麻烦

来自分类Dev

LLVM指针作为函数参数

来自分类Dev

使用指针作为函数的参数

来自分类Dev

双指针作为函数参数

来自分类Dev

双指针作为函数的参数

来自分类Dev

整数指针作为函数的参数

来自分类Dev

模板参数类型“void”与显式使用“void”

来自分类Dev

将void指针作为参数传递

来自分类Dev

以整数作为模板参数的函数模板的显式实例化

来自分类Dev

将显式指定的函数模板重载作为模板参数传递的正确语法是什么?

来自分类Dev

指针上的golang指针作为函数参数

来自分类Dev

以void指针作为参数传递函数会发出警告

来自分类Dev

如何在C中使用结构指针作为参数调用void函数?

来自分类Dev

Kotlin:显式未命名的函数参数

来自分类Dev

显式输入解构函数参数

来自分类Dev

带void *参数转换的函数指针

来自分类Dev

函数指针中 void* 参数的自动转换