تعریف تابعی به صورت template هم در source و هم در header - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تعریف تابعی به صورت template هم در source و هم در header

+1 امتیاز
سلام دوستان.

چرا امکان این وجود نداره که ما بتونیم یک تابع template را در سورس و هدر تعریف کنیم؟.تا جاییکه من اطلاع دارم نمیشه و باید توابع را داخا struct یا فایل ببریم.
سوال شده بهمن 20, 1392  بوسیله ی farnoosh (امتیاز 8,362)   20 44 59

1 پاسخ

+5 امتیاز
 
بهترین پاسخ

چراش که زیاد سخت نیست چون زمان کامپایل وقتیکه نوع template را تعریف می کنید کامپایلر میاد آن تابع را با نوع موردنظر به صورت inline در فایل باینری می نویسه حالا این سورسی که باید ازش استفاده کنه بایستی توی هدر باشه.یک استثنا هم وجود داره که شما یکبار دیگه singature تابع را با نوع استفاده شده در سورس خودتون ذکر کنید.به صورت زیر:

//header.h
#ifndef TEST_H
#define TEST_H

template <class T> 
void test(T value);
#endif TEST_H
 

//source.cpp

#include "stdafx.h"
#include "Header.h"
#include <iostream>
using namespace std;

template <class T> void test(T value) {
	cout << value;
}

template void test<int>(int value);



//caller.cpp

#include "header.h"
void caller(){
	test<int>(1);
}


 

بله راه حل دیگه هم اینه که ببرید توی struct یا class تعاریف template را.

پاسخ داده شده بهمن 20, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد بهمن 20, 1392 بوسیله ی farnoosh
واسه همینه که هیچ کدوم از STL ها تو فایل *.cpp (بر خلاف اکثر هدر ها) Implement نشدن.
...