มีวิธีส่งการอ้างอิงเป็นอาร์กิวเมนต์ไปยังอาร์กิวเมนต์พิมพ์ชื่อแม่แบบหรือไม่ ฉันหมายถึงเช่นนั้นแทนที่จะผ่าน int ตัวอย่างเช่นเพื่อส่งการอ้างอิงไปยัง int
template <typename T>
struct Foo
{
Foo(T arg) : ptr(arg) {}
T ptr;
};
int main()
{
int* a = new int(6);
Foo<decltype(a)> foo1(a); // ptr is a copy of a pointer
Foo<decltype(&a)> foo1(&a); // ptr seems to be a pointer to a pointer
}
ฉันรู้ว่าฉันสามารถทำให้สมาชิก 'ptr' เป็นตัวอ้างอิงถึงตัวชี้โดยทำให้ T & อยู่ในชั้นเรียน แต่ฉันสงสัยว่าสิ่งนี้สามารถทำได้จากการโต้แย้งที่ส่งผ่านไปยังอาร์กิวเมนต์เทมเพลต
decltype
เพราะการใช้ชื่ออย่างแท้จริงคุณก็สามารถเขียนFoo<int*&>