C++ 在函数中转换指针

标签 c++ pointers casting template-function

我目前有这个宏

#define bind(OBJECT, ROLE) \
assert( sizeof(*ROLE) == 1 ); \
ROLE = reinterpret_cast<decltype(ROLE)>(OBJECT);

它导致了一些名称冲突问题,所以我想将它移到一个模板化函数中,例如

template<typename T1, typename T2>
void bind(T1 obj, T2 r) {
    assert( sizeof(*r) == 1 );
    r = reinterpret_cast<T2>(obj);
};

但是,我怀疑这是不可能的,但想确认一下吗?为了改变 r,我必须有一个指向指针的指针吗?

最佳答案

你至少需要一个引用:

template<typename T1, typename T2>
void bind(T1 obj, T2& r)
{
    assert( sizeof(*r) == 1 );
    r = reinterpret_cast<T2>(obj);
}

另一种选择是使用模板转换运算符。然后你可以调用语法:

ROLE = bind(OBJ);

代码大概是这样的:

template<typename T1> class auto_converter
{
    const T1& value;
public:
    auto_converter(const T1& v) : value(v) {}

    // template conversion operator
    template<typename T2>
    operator T2() const
    {
        assert(sizeof (*T2()) == 1);
        return reinterpret_cast<T2>(value);
    }
};

template<typename T1>
autoconverter<T1> bind(const T1& obj) { return obj; }

关于C++ 在函数中转换指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511729/

相关文章:

pointers - 范围引用而不是值

python - 将实现特定的 C++ char 与 Python 中的 uint32_t 转换相匹配

java - 通过Gson lib从json文件获取对象,有java.lang.UnsupportedOperationException错误

c++ - 关于模板类特化的范例

c - C 中带有指针的 int 矩阵 - 内存分配困惑

c++ - 是否有用于指针删除的函数(对象)模板可用于在某处重复使用(boost,STL)?

c - 应该打印整数。打印地址

java - 有哪些硬性 "rules"用于使用子类型进行转换?

c++ - 并行 SURF 和 SIFT 计算

c++ - 您如何从一个变量更改为另一个变量?