0

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
4

2 に答える 2

2

間接的に適用するものを指定する必要があります。 multIndirect<T>

applyIndirect(multIndirect<int>, &y);

applyを使用する場合は、コンパイラが正しい型を推測するため、型を指定する必要はありません。

void apply(void (*funcPtr)(int*), int* pVal);
//         ^^^^^^^^^^^^^^^^^^^^^
于 2013-11-10T06:12:16.363 に答える