小编Pab*_*blo的帖子

使用指向模板函数的指针时出现VC++错误

我正在尝试为libcurl编写模板回调函数.但是,当使用指向模板函数实例的指针时,VC++ 2008和2010会一直给我这个错误:

template-callback.cpp(27):错误C2664:'curl_easy_setopt':无法将参数3从'size_t(__ cdecl*)(void*,size_t,size_t,void*)'转换为'...'上下文不允许消除过载功能的歧义

但GCC(4.5.1)编译代码没有问题.这是代码的修剪版本:

#include <string>

template<typename String>
size_t callback(
    void*       ptr
  , size_t  size
  , size_t  nmemb
  , void*       userdata
)
{
  //String* str = static_cast<String*>(userdata);
  size_t    len = size*nmemb;
  //str->append(static_cast<char const*>(ptr), len);
  return len;
}

typedef size_t (*write_callback)(void*, size_t, size_t, void*);
struct CURL;
enum CURLOption { none };
void curl_easy_setopt(CURL*, CURLOption, ...);

void f()
{
  CURL* curl = NULL;
  CURLOption option = none;

  // This gives an error
  curl_easy_setopt(curl, option, &callback<std::string>);

  // This doesn't
  write_callback cb = …
Run Code Online (Sandbox Code Playgroud)

c++ templates function-pointers visual-c++

7
推荐指数
1
解决办法
691
查看次数

标签 统计

c++ ×1

function-pointers ×1

templates ×1

visual-c++ ×1