簡體   English   中英

如何將類型名稱傳遞給函數?

[英]How do i pass a type name to a function?

我的問題是我無法將類型名稱傳遞給函數。 我真的不知道該怎么做,所以我問自己是否有可能,但是我想是這樣。

所以我想創建一個接受像typeof()這樣的類型名稱的函數。

sizeof(int); // accepts a type name not a var

我試圖實現這一點的代碼如下:

#include "stdafx.h"
using namespace std;

void foo( WHAT TO PUT HERE? ) {...};
int main(){
    foo(float);
    return EXIT_SUCCES;
}

基本上我的問題是我不知道如何使函數foo接受像sizeof()這樣的類型名稱,在聲明中放入什么使其使其接受類型名稱?

感謝您的閱讀和幫助。

首先, sizeof不是函數,而是運算符(僅在編譯期間進行處理),並且您無法創建自己的運算符。

您可能需要的是“元功能”-模板。

template <typename T>
void foo() { ... /* Use T as type, ex. sizeof(T) */ ... }

並命名為: foo<MyType>()

請記住-所有模板參數等都在編譯時解決,在C ++中無法在運行時傳遞類型(至少任何類型)

可以將返回類型指定為模板參數( T foo() ),從T( typename T::return_type foo() )派生-如果正確准備了T,或者可以為所需類型提供模板專用化( template <> float foo<int>()返回foo<int>調用的浮點數)

如果確實需要,則可以創建宏以隱藏模板#define fooCall(X) foo<X>() 但是請- 不要這樣做 ,代碼應該清楚地說明它的作用和時間 在運行時和編譯時對代碼進行評估時, <>()之間的差異會向讀者顯示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM