为什么模板订单在此代码中很重要?

时间:2016-10-12 02:45:51

标签: c++ templates functional-programming

我写了一个用于播放模板的测试程序。该程序旨在模拟一种创建任何类型的通用对象的方法(例如,装箱的对象将是对象< int>)。

我希望能够在不实现特定asString操作的情况下打印这些盒装对象,因为底层类型已经知道如何通过stringstream打印自己(或者如果他们没有,他们可以实现它),所以我想要避免重复的代码。

我设法让它工作,但如果我改变两个模板化的asString函数的顺序,程序就不再编译了。

以下是代码:

#include <iostream>
#include <string>
#include <sstream>
#include <stdio.h>

/* an object in the set(type) T */
template <typename T>
struct object {
    T identity;

    object(T t) {
        this->identity = t;
    }
};

template <typename T>
std::string asString(T t) {
    std::stringstream s;
    s << t;
    return s.str();    
}

template <typename T>
std::string asString(object<T> obj) {
    std::stringstream s;
    s << asString(obj.identity);
    return s.str();
}

int main(int argc, char **argv)
{
    object<int> a = 3;
    puts(asString(a).c_str());

    return 0;
}

有人可以解释为什么两个asString函数定义的顺序很重要吗?

0 个答案:

没有答案