我有一个带有模板的类,在这个类里面有一个变量T*变量;和变量字符串str;还有一个包含部分代码的函数:
if(std::is_same<T, string>::value){
*Variable = str;
return 0;
}当然,尽管上面的赋值不能在不同的变量上工作,但由于之前的条件,编译器会在编译时抱怨。我在考虑用两个模板参数编写条件模板函数来代替上面的赋值:
Assign(Variable, &str);在上课前:
template <typename T, typename U>
conditional <T, U> void Assign(T* to, U* from){
;
}
conditional <string, string> void Assign(T* to, U* from){
*to = *from;
}因此,编译器会为我需要的字符串选择专用的字符串。这是如何表述的?这是否仅适用于变量类型,或者我是否需要第三个参数?或者可能会有某种模板条件,仅用于函数内部的主代码?
发布于 2020-01-25 01:31:30
只需使用模板专门化:
template<typename T>
class Foo {
T * Variable;
public:
explicit Foo(T *p) : Variable{p}
{}
void Assign(const std::string& str) {
std::cout << str << " No op\n";
}
};
template<>
void Foo<std::string>::Assign(const std::string& str) {
*Variable = str;
}https://wandbox.org/permlink/Oi1bl8LCQQQ2LyJC
这将适用于相当旧的C++版本(至少是C++03)。
发布于 2020-01-25 02:08:32
如果您可以访问C++17,那么只需使用if constexpr
if constexpr (std::is_same<T, string>::value) {
*Variable = str;
return 0;
}发布于 2020-01-25 03:20:50
因此,我在使用模板和模板专门化的类之前编写了赋值函数
template<typename T, typename U>
void Assign(T* to, U* from){
;
}
template<>
void Assign(string* to, string* from){
*to = *from;
}我将*Variable = str;行改为:
Assign(Variable, &str);这是一个对我有帮助的主题:Templated Functions.. ERROR: template-id does not match any template declaration
https://stackoverflow.com/questions/59900908
复制相似问题