gpt4 book ai didi

C++模板方法,基于模板类改变行为

转载 作者:太空狗 更新时间:2023-10-29 23:31:19 24 4
gpt4 key购买 nike

我正在尝试编写一个 C++ 模板方法。下面是一个示例代码,演示了我想在该方法中执行的操作。

template<class T>
void method(T value) {
// This string should change based on type T
char *str = "Int" or "Float" or .. ;
...
...
std::cout << value << " is of type " << str << std::cout;
}

基本上,方法的行为(本例中的字符串值)将根据类型 T 发生变化。我如何使用模板执行此操作?

最佳答案

您可以针对不同类型专门化您的模板。如果您从基本案例开始:

template <class T>
void method(T value);

然后您可以为 T 的任何特定值声明不同的行为:

template <>
void method<int>(int value) {
// special behavior
}

等等。但是因为只有你的函数的输入类型在改变,所以在这种情况下你真的不需要模板!你可以用不同的参数类型重载你的函数:

void method(int T);
void method(float T);
void method(void* T);

编辑:使用模板特化来获取类型的名称并在另一个函数模板中使用它:

template <class T>
std::string type_to_string();

template <>
std::string type_to_string<int>() {
return "int";
}

template <>
std::string type_to_string<float>() {
return "float";
}


template <class T>
some_other_function(T value) {
std::cout << value << " is a " << type_to_string<T>() << std::endl;
}

当然,你仍然可以在没有模板的情况下这样做:

std::string type_to_string(int) {
return "int";
}

some_other_function(int value) {
std::cout << value << " is a " << type_to_string(value) << std::endl;
}

如果您必须进行一些复杂的类型级计算,我建议您使用模板。但是在这里,我认为没有它们你也可以很好地完成你想要的。无论哪种方式,惯用的方法(有或没有模板)都是将您的函数拆分成不同的自然部分。

关于C++模板方法,基于模板类改变行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6053444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com