Web を検索しましたが、問題に対する答えが見つかりませんでした > C++ テンプレート コードがコンパイルされないのはなぜですか? return ステートメントの前の最後の行を削除すると、期待どおりにコンパイルおよび実行されます。
g++ バージョン 4.3.4 を使用しています。専門家の助けに感謝します。
よろしく、マイカ
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <stdint.h>
#include <boost/lexical_cast.hpp>
void mult(int* ptr)
{
std::cout << "void mult(" << *ptr << "): line: " << __LINE__ << ", function: "<< __FUNCTION__ << std::endl;
}
template <typename T>
void multIndirect(T* x)
{
std::cout << "void mult(" << *x << "): line: " << __LINE__ << ", function: "<< __FUNCTION__ << std::endl;
}
void apply(void (*funcPtr)(int*), int* pVal)
{
std::cout << "apply(" << boost::lexical_cast<std::string>((uintptr_t) funcPtr) << ", " << *pVal << "): line:" << __LINE__ << ", function: " << __FUNCTION__ << std::endl;
funcPtr(pVal);
}
template <typename Func, typename T>
void applyIndirect(Func funcPtr, T* x)
{
std::cout << "apply(" << boost::lexical_cast<std::string>((uintptr_t) funcPtr) << ", " << *x << "): line:" << __LINE__ << ", function: " << __FUNCTION__ << std::endl;
funcPtr(x);
}
int main(void) {
int y = 300;
mult(&y);
apply(mult, &y);
apply(multIndirect, &y);
applyIndirect(multIndirect, &y);
return EXIT_SUCCESS;
}
コンパイラ エラーが発生します。
CPPTemplate.cpp: In function int main():
CPPTemplate.cpp:47: error: no matching function for call to applyIndirect(<unresolved overloaded function type>, int*)
make: *** [CPPTemplate.o] Error 1