提问人:Hakim 提问时间:1/25/2023 最后编辑:Ted LyngmoHakim 更新时间:1/25/2023 访问量:36
从实例化的函数模板调用时不需要显式实例化的函数模板
Function template not requiring an explicit instantiation when called from instantiated function template
问:
我有一个函数模板调用另一个函数模板。第一个是显式实例化的,而第二个不是。
我意识到通过实例化模板,可以创建具有给定类型的函数。但这是否意味着任何调用的函数模板(来自前一个函数)也被实例化?
请参阅下面的代码以理解我的意思:
主 .cpp:
#include "library.hpp"
int main() {
std::vector<int> vec = { 1, 2, 3, 4, 5 };
Library::print_vector(vec);
return 0;
}
库.hpp:
#ifndef LIBRARY_HPP
#define LIBRARY_HPP
#include <vector>
namespace Library {
template <typename T>
void print_vector(const std::vector<T>& vec);
template <typename T>
void print(T x);
}
库 .cpp:
#include <iostream>
#include "library.hpp"
template <typename T>
void Library::print_vector(const std::vector<T>& vec) {
for (T x : vec)
print(x);
}
template <typename T>
void Library::print(T x) {
std::cout << "x: " << x << '\n';
}
// explicit template instantiation
// no template instantiation for Library::print(), and yet no linking error!!!
template void Library::print_vector(const std::vector<int>&);
答: 暂无答案
评论
void Library::print_vector(const std::vector<int>&);
void Library::print(int);
undefined reference
.cpp
print
print_vector
T
T
int