我是模板的新手,我正在尝试使用它们,以避免重复非常相似的功能.
在下面的例子中,我做了一个简单而小巧的工作示例来说明我的问题.
特别是,我有两个struct("solo"和"duo").这些结构有一个共同的成员(a),其中一个有一个特定的成员(b).
然后我有一个模板函数,可以采取结构和打印成员...并且我希望它只能在结构类型为"duo"时才能打印成员b.
我这样做(使用std :: is_same_v)它不会编译.我读到可以使用专业化这样做,但我想知道是否有更优雅的方式?因为那时我有失去模板优势的感觉......但是我可能还没有获得模板的强大功能以及如何使用它们.
非常感谢您的帮助!
#include <iostream>
#include <string>
#include <type_traits>
struct solo{
int a;
};
struct duo : solo{
int b;
};
template<class T>
void function(T test){
std::cout<< std::to_string(test.a);
if(std::is_same<T, duo>::value) std::cout<< std::to_string(test.b);
}
int main()
{
solo testS;
testS.a = 1;
function(testS);
}
Run Code Online (Sandbox Code Playgroud)